Skip to content

Commit

Permalink
feat(eslint-plugin): add new 'strict' config (#4706)
Browse files Browse the repository at this point in the history
* feat: add new 'strict' config

* chore: simplified strict to always be 'warn'

* chore: missing | false

* test: update tests for new strictness

* test: update .md file templates and docs.test.ts

* chore: update configs.test.ts too

* chore: update website docs

* docs: add sub-list of configs to attributes

* docs: unified configs readme and presets file

* docs: finish trimming configs readme

* fix: sidebar.base.js

* fix: finish renaming presets to config

* fix: configs docs id

* fix: typo; not 'three'

* fix: tip colons

* chore: replace heavy_check_mark with lock

* chore: mostly fixed up docs, probably one or two more things to do

* docs: method-signature-style period, more in configs.ts

* docs: method-signature-style period, more in configs.ts; fix readmes

* chore: passing configs.test.ts, docs.test.ts locally
  • Loading branch information
JoshuaKGoldberg committed May 16, 2022
1 parent 8e72bf1 commit 4a500b2
Show file tree
Hide file tree
Showing 172 changed files with 1,276 additions and 591 deletions.
92 changes: 92 additions & 0 deletions docs/linting/CONFIGS.md
@@ -0,0 +1,92 @@
---
id: configs
sidebar_label: Configurations
title: Configurations
---

## Built-In Configurations

`@typescript-eslint/eslint-plugin` includes built-in configurations you can extend from to pull in the recommended starting rules.

With the exception of `strict`, all configurations are considered "stable".
Rule additions and removals are treated as breaking changes and will only be done in major version bumps.

### `eslint-recommended`

This ruleset is meant to be used after extending `eslint:recommended`.
It disables core ESLint rules that are already checked by the TypeScript compiler.
Additionally, it enables rules that promote using the more modern constructs TypeScript allows for.

```jsonc
{
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended"
]
}
```

This config is automatically included if you use any of the other configurations mentioned on this page.

### `recommended`

Recommended rules for code correctness that you can drop in without additional configuration.
These rules are those whose reports are almost always for a bad practice and/or likely bug.
`recommended` also disables rules known to conflict with this repository, or cause issues in TypeScript codebases.

```json
{
"extends": ["plugin:@typescript-eslint/recommended"]
}
```

::tip
We strongly recommend all TypeScript projects extend from this configuration.
:::

### `recommended-requiring-type-checking`

Additional recommended rules that require type information.
Rules in this configuration are similarly useful to those in `recommended`.

```json
{
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
]
}
```

::tip
We recommend all TypeScript projects extend from this configuration, with the caveat that rules using type information take longer to run.
See [Linting with Type Information](/docs/linting/type-linting) for more details.
:::

### `strict`

Additional strict rules that can also catch bugs but are more opinionated than recommended rules.

```json
{
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:@typescript-eslint/strict"
]
}
```

::tip
We recommend a TypeScript project extend from this configuration only if a nontrivial percentage of its developers are highly proficient in TypeScript.
:::

## Overriding Configurations

These configurations are our recommended starting points, but **you don't need to use them as-is**.
ESLint allows you to configure your own rule settings on top of any extended configurations.
See [ESLint's Configuring Rules docs](https://eslint.org/docs/user-guide/configuring/rules#using-configuration-files).

### Suggesting Configuration Changes

If you feel strongly that a specific rule should (or should not) be one of these configurations, please feel free to [file an issue](TODO: NEW ISSUE TEMPLATE) along with a **detailed** argument explaining your reasoning.
264 changes: 132 additions & 132 deletions packages/eslint-plugin/README.md

Large diffs are not rendered by default.

265 changes: 133 additions & 132 deletions packages/eslint-plugin/docs/rules/README.md

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion packages/eslint-plugin/docs/rules/TEMPLATE.md
Expand Up @@ -22,6 +22,8 @@ To fill out: tell us more about this rule.

## Options

This rule is not configurable.

```jsonc
// .eslintrc.json
{
Expand Down Expand Up @@ -52,6 +54,8 @@ For example if this rule requires a feature released in a certain TS version.

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -107,6 +107,8 @@ If you don't care about the general structure of the code, then you will not nee

## Attributes

- [x] ✅ Recommended
- Configs:
- [x] ✅ Recommended
- [x] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/array-type.md
Expand Up @@ -125,6 +125,8 @@ This matrix lists all possible option combinations and their expected results fo

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/await-thenable.md
Expand Up @@ -53,6 +53,8 @@ This is generally not preferred, but can sometimes be useful for visual consiste

## Attributes

- [x] ✅ Recommended
- Configs:
- [x] ✅ Recommended
- [x] 🔒 Strict
- [ ] 🔧 Fixable
- [x] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/ban-ts-comment.md
Expand Up @@ -145,6 +145,8 @@ If you want to use all of the TypeScript directives.

## Attributes

- [x] ✅ Recommended
- Configs:
- [x] ✅ Recommended
- [x] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
17 changes: 16 additions & 1 deletion packages/eslint-plugin/docs/rules/ban-tslint-comment.md
Expand Up @@ -30,12 +30,27 @@ someCode(); // tslint:disable-line
someCode(); // This is a comment that just happens to mention tslint
```

## Options

```jsonc
// .eslintrc.json
{
"rules": {
"@typescript-eslint/ban-tslint-comment": "warn"
}
}
```

This rule is not configurable.

## When Not To Use It

If you are still using TSLint.

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/ban-types.md
Expand Up @@ -195,6 +195,8 @@ const curly2: Record<'a', string> = { a: 'string' };

## Attributes

- [x] ✅ Recommended
- Configs:
- [x] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/brace-style.md
Expand Up @@ -29,6 +29,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -111,6 +111,8 @@ for how literal values are exposed by your classes.

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/comma-dangle.md
Expand Up @@ -41,6 +41,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/comma-spacing.md
Expand Up @@ -29,6 +29,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -85,6 +85,8 @@ type Foo = {

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -119,6 +119,8 @@ If you do not want to enforce consistent type assertions.

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -87,6 +87,8 @@ If you specifically want to use an interface or type literal for stylistic reaso

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/consistent-type-exports.md
Expand Up @@ -112,6 +112,8 @@ export { Button, type ButtonProps } from 'some-library';

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [x] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/consistent-type-imports.md
Expand Up @@ -67,6 +67,8 @@ const x: import('Bar') = 1;

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/default-param-last.md
Expand Up @@ -65,6 +65,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/dot-notation.md
Expand Up @@ -90,6 +90,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [x] 🔒 Strict
- [x] 🔧 Fixable
- [x] 💭 Requires type information
Expand Up @@ -293,6 +293,8 @@ you will not need this rule.

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -351,6 +351,8 @@ If you think defaulting to public is a good default, then you should consider us

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -288,6 +288,8 @@ If you wish to make sure all functions have explicit return types, as opposed to

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/func-call-spacing.md
Expand Up @@ -29,6 +29,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/indent.md
Expand Up @@ -33,6 +33,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/init-declarations.md
Expand Up @@ -29,6 +29,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [ ] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/keyword-spacing.md
Expand Up @@ -29,6 +29,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
Expand Up @@ -80,6 +80,8 @@ Taken with ❤️ [from ESLint core](https://github.com/eslint/eslint/blob/main/

## Attributes

- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information
4 changes: 3 additions & 1 deletion packages/eslint-plugin/docs/rules/member-delimiter-style.md
Expand Up @@ -211,6 +211,8 @@ If you don't care about enforcing a consistent member delimiter in interfaces an
## Attributes
- [ ] ✅ Recommended
- Configs:
- [ ] ✅ Recommended
- [ ] 🔒 Strict
- [x] 🔧 Fixable
- [ ] 💭 Requires type information

0 comments on commit 4a500b2

Please sign in to comment.