diff --git a/.cspell.json b/.cspell.json index dc41dd9403fb..83e9dd112d67 100644 --- a/.cspell.json +++ b/.cspell.json @@ -49,8 +49,8 @@ "words": [ "Airbnb", "Airbnb's", - "ambiently", "allowdefaultprojectforfiles", + "ambiently", "Armano", "astexplorer", "Astro", @@ -90,6 +90,7 @@ "falsiness", "globby", "IDE's", + "ignoreconditionaltests", "IIFE", "IIFEs", "jameshenry", @@ -99,6 +100,7 @@ "lzstring", "markdownlint", "metastring", + "multipass", "necroing", "nocheck", "noninteractive", diff --git a/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md b/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md index a1c5d205a025..7606e3e9f364 100644 --- a/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md +++ b/packages/website/blog/2022-09-18-automated-rule-docs-with-docusaurus-and-remark.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg @@ -223,6 +223,6 @@ Thanks Joshua! πŸ€— ## Supporting typescript-eslint -If you enjoyed this blog post and/or or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). +If you enjoyed this blog post and/or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). We're a small volunteer team and could use your support to make the ESLint experience on TypeScript great. Thanks! πŸ’– diff --git a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md index 5d1abe9bb65b..9fccf0035b25 100644 --- a/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md +++ b/packages/website/blog/2022-12-05-asts-and-typescript-eslint.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg diff --git a/packages/website/blog/2023-02-24-consistent-type-exports-and-imports-why-and-how.md b/packages/website/blog/2023-02-24-consistent-type-exports-and-imports-why-and-how.md index 5e0f1e02de58..cde68190cd45 100644 --- a/packages/website/blog/2023-02-24-consistent-type-exports-and-imports-why-and-how.md +++ b/packages/website/blog/2023-02-24-consistent-type-exports-and-imports-why-and-how.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg @@ -186,6 +186,6 @@ See [our Getting Started docs](/getting-started) for more information on linting ## Supporting typescript-eslint -If you enjoyed this blog post and/or or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). +If you enjoyed this blog post and/or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). We're a small volunteer team and could use your support to make the ESLint experience on TypeScript great. Thanks! πŸ’– diff --git a/packages/website/blog/2023-03-13-announcing-typescript-eslint-v6-beta.md b/packages/website/blog/2023-03-13-announcing-typescript-eslint-v6-beta.md index 38f9f289d03f..49d3bbf416e9 100644 --- a/packages/website/blog/2023-03-13-announcing-typescript-eslint-v6-beta.md +++ b/packages/website/blog/2023-03-13-announcing-typescript-eslint-v6-beta.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg @@ -377,6 +377,6 @@ See the [v6.0.0 milestone](https://github.com/typescript-eslint/typescript-eslin ## Supporting typescript-eslint -If you enjoyed this blog post and/or or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). +If you enjoyed this blog post and/or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). We're a small volunteer team and could use your support to make the ESLint experience on TypeScript great. Thanks! πŸ’– diff --git a/packages/website/blog/2023-07-09-announcing-typescript-eslint-v6.md b/packages/website/blog/2023-07-09-announcing-typescript-eslint-v6.md index e0352744d189..0920b0047905 100644 --- a/packages/website/blog/2023-07-09-announcing-typescript-eslint-v6.md +++ b/packages/website/blog/2023-07-09-announcing-typescript-eslint-v6.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg @@ -702,6 +702,6 @@ See the [v6.0.0 milestone](https://github.com/typescript-eslint/typescript-eslin ## Supporting typescript-eslint -If you enjoyed this blog post and/or or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). +If you enjoyed this blog post and/or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). We're a small volunteer team and could use your support to make the ESLint experience on TypeScript great. Thanks! πŸ’– diff --git a/packages/website/blog/2023-09-18-parser-options-project-true.md b/packages/website/blog/2023-09-18-parser-options-project-true.md index c767972508ae..d279beae93b3 100644 --- a/packages/website/blog/2023-09-18-parser-options-project-true.md +++ b/packages/website/blog/2023-09-18-parser-options-project-true.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg diff --git a/packages/website/blog/2023-12-25-deprecating-formatting-rules.md b/packages/website/blog/2023-12-25-deprecating-formatting-rules.md index 9bb344ee696f..6767fedc9904 100644 --- a/packages/website/blog/2023-12-25-deprecating-formatting-rules.md +++ b/packages/website/blog/2023-12-25-deprecating-formatting-rules.md @@ -1,6 +1,6 @@ --- authors: - - image_url: https://www.joshuakgoldberg.com/img/josh.jpg + - image_url: /img/team/joshuakgoldberg.jpg name: Josh Goldberg title: typescript-eslint Maintainer url: https://github.com/JoshuaKGoldberg diff --git a/packages/website/blog/2024-05-27-announcing-typescript-eslint-v8-beta.mdx b/packages/website/blog/2024-05-27-announcing-typescript-eslint-v8-beta.mdx new file mode 100644 index 000000000000..385f13fec573 --- /dev/null +++ b/packages/website/blog/2024-05-27-announcing-typescript-eslint-v8-beta.mdx @@ -0,0 +1,353 @@ +--- +authors: + - image_url: /img/team/joshuakgoldberg.jpg + name: Josh Goldberg + title: typescript-eslint Maintainer + url: https://github.com/JoshuaKGoldberg +description: Announcing the release of typescript-eslint's v8 beta, including its changes and timeline. +slug: announcing-typescript-eslint-v8-beta +tags: [breaking changes, typescript-eslint, v7, v8] +title: Announcing typescript-eslint v8 Beta +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +[typescript-eslint](https://typescript-eslint.io) is the tooling that enables standard JavaScript tools such as [ESLint](https://eslint.org) and [Prettier](https://prettier.io) to support TypeScript code. +We've been working on a set of breaking changes and general features that we're excited to get in front of users soon. +And now, we're excited to say that typescript-eslint v8 is ready for public beta testing! πŸŽ‰ + +Our plan for typescript-eslint v8 is to: + +1. Have users try out betas starting in May of 2024 +2. Respond to user feedback for the next ~1-2 months +3. Release a stable version within the next ~1-2 months + +Nothing mentioned in this blog post is set in stone. +If you feel passionately about any of the choices we've made here β€” positively or negatively β€” then do let us know on [the typescript-eslint Discord](https://discord.gg/FSxKq8Tdyg)'s `#v8` channel! + + + +## Trying Out v8 + +Please do try out the typescript-eslint v8 beta! + +### As A New User + +If you don't yet use typescript-eslint, you can go through our [configuration steps on the v8 _Getting Started_ docs](https://v8--typescript-eslint.netlify.app/getting-started). +It'll walk you through setting up typescript-eslint in a project. + +To use v8 specifically, see the following section for an updated install command. + +### As An Existing User + +If you already use typescript-eslint, you'll need to first replace your package's previous versions of `@typescript-eslint/eslint-plugin` and `@typescript-eslint/parser` with `@rc-v8` versions: + + + + +```shell +npm i typescript-eslint@rc-v8 --save-dev +``` + + + + +```shell +npm i @typescript-eslint/eslint-plugin@rc-v8 @typescript-eslint/parser@rc-v8 --save-dev +``` + + + + +We highly recommend then basing your ESLint configuration on the reworked typescript-eslint [recommended configurations](/users/configs) β€” especially if it's been a while since you've reworked your linter config. + +## User-Facing Changes + +These are the changes that users of typescript-eslint β€”generally, any developer running ESLint on TypeScript codeβ€” should pay attention to when upgrading typescript-eslint from v7 to v8. + +> ⏳ indicates a change that has been scheduled for v8 but not yet released. +> We'll update this blog post as the corresponding pull requests land. + +### ESLint v9 Support + +typescript-eslint v8 ships with full support for ESLint v9. + +typescript-eslint v7 was our first version that supported ESLint's [new "flat" config file format](https://eslint.org/docs/latest/use/configure/configuration-files), which was already available in ESLint v8. +ESLint v9 still supports ESLint's [older legacy config file format](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated) so our tooling does as well. +However, ESLint v9 also includes a set of breaking changes that we added support for in typescript-eslint v8. +See the [ESLint v9 release blog post](https://eslint.org/blog/2024/04/eslint-v9.0.0-released) for more details. + +### Project Service + +The biggest new feature added in this version is the stability of our new "project service". +In short, the project service is a new way to enable [typed linting](/getting-started/typed-linting) that is generally _easier to configure_ and _faster at runtime_ than our previous offerings. +It's been experimentally available since v6.1.0 under the name `EXPERIMENTAL_useProjectService`; now, we've renamed it to `projectService`. + +You can use the new project service in your configuration instead of the previous `parserOptions.project`: + +```js title="eslint.config.js" +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + { + languageOptions: { + parserOptions: { + // Remove this line + project: true, + // Add this line + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +); +``` + +The project service will automatically find the closest `tsconfig.json` for each file (like `project: true`). +It also allows enabling typed linting for files not explicitly included in a `tsconfig.json`. +This should remove the need for custom `tsconfig.eslint.json` files to lint files like `eslint.config.js`! + +Typed linting for out-of-project files can be done by specifying two properties of a `parserOptions.projectService` object: + +- `allowDefaultProject`: a glob of a small number of out-of-project files to enable a slower default project on +- `defaultProject`: path to a TypeScript configuration file to use for the slower default project + +```js title="eslint.config.js" +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + { + languageOptions: { + parserOptions: { + // Remove this line + project: ['packages/*/tsconfig.json', 'tsconfig.eslint.json'], + // Added lines start + projectService: { + allowDefaultProject: ['./*.js'], + defaultProject: './tsconfig.json', + }, + // Added lines end + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +); +``` + +Internally, the project service uses the same TypeScript APIs that editors such as VS Code use. +Doing so should make it harder to accidentally configure different type information for ESLint than what you see in day-to-day editing. + +We're thrilled to have the project service option promoted to stable in v8. +We'll soon release a [dedicated `parserOptions` blog post](https://github.com/typescript-eslint/typescript-eslint/pull/8031) walking through the new option in more details. +πŸš€ + +### Updated Configuration Rules + +Every new major version of typescript-eslint comes with changes to which rules are enabled in the preset configurations and with which options. +Because this release also includes a reworking of the configurations themselves, the list of changes is too large to put in this blog post. +Instead see the table in [Changes to configurations for 8.0.0](https://github.com/typescript-eslint/typescript-eslint/discussions/8914) for a full list of the changes. + +Please do try out the new rule configurations presets and let us know in that discussion! + +:::tip +If your ESLint configuration contains many `rules` configurations, we suggest the following strategy to start anew: + +1. Remove all your rules configurations +2. Extend from the preset configs that make sense for you +3. Run ESLint on your project +4. In your ESLint configuration, turn off any rules creating errors that don't make sense for your project β€” with comments explaining why +5. In your ESLint configuration and/or with inline `eslint-disable` comments, turn off/downgrade to "warn" any rules creating too many errors for you to fix β€” with _"TODO"_ comments linking to tracking issues/tickets to re-enable them + +::: + +### Rule Breaking Changes + +Several rules are changed in significant enough ways to be considered breaking changes: + +- ⏳ [Rules: Deprecate prefer-ts-expect-error in favor of ban-ts-comment](https://github.com/typescript-eslint/typescript-eslint/issues/8333) + - If you have [`@typescript-eslint/prefer-ts-expect-error`](/rules/prefer-ts-expect-error) manually enabled, remove that, and instead either use a [recommended config](/users/configs) or manually enable [`@typescript-eslint/ban-ts-comment`](/rules/ban-ts-comment) +- ⏳ [chore(eslint-plugin): deprecate no-var-requires in favor of no-require-imports](https://github.com/typescript-eslint/typescript-eslint/pull/8334) + - If you have [`@typescript-eslint/no-var-requires`](/rules/no-var-requires) manually enabled, remove that, and instead either use a [recommended config](/users/configs) or manually enable [`@typescript-eslint/no-require-imports`](/rules/no-require-imports) +- [feat(eslint-plugin): remove deprecated no-throw-literal rule](https://github.com/typescript-eslint/typescript-eslint/issues/9083) + - If you have [`@typescript-eslint/no-throw-literal`](/rules/no-throw-literal) manually enabled, remove that, and instead either use a [recommended config](/users/configs) or manually enable [`@typescript-eslint/only-throw-error`](/rules/only-throw-error) +- ⏳ [fix(eslint-plugin): [no-useless-template-literals] rename to no-useless-template-expression](https://github.com/typescript-eslint/typescript-eslint/pull/8821) + - Find-and-replace text from `no-useless-template-literals` to `no-useless-template-expression` +- [feat(eslint-plugin): deprecate no-loss-of-precision extension rule](https://github.com/typescript-eslint/typescript-eslint/pull/8832) + - If you have [`@typescript-eslint/no-loss-of-precision`](/rules/no-loss-of-precision) manually enabled, replace it with the base rule `no-loss-of-precision`. +- [feat(eslint-plugin): remove formatting/layout rules](https://github.com/typescript-eslint/typescript-eslint/pull/8833) + - If you're using any of the old deprecated formatting rules, see [eslint.style](https://eslint.style) for their new equivalents +- [feat(eslint-plugin): [prefer-nullish-coalescing] change ignoreConditionalTests default to true](https://github.com/typescript-eslint/typescript-eslint/pull/8872) + - If you want to have the rule check conditional tests, set its [`ignoreConditionalTests` option](/rules/prefer-nullish-coalescing/#ignoreconditionaltests) to `false` in your ESLint config +- [feat(eslint-plugin): [no-unused-vars] align catch behavior to ESLint 9](https://github.com/typescript-eslint/typescript-eslint/pull/8971) + - If you want [`@typescript-eslint/no-unused-vars`](/rules/no-unused-vars) to ignore caught errors, enable its `caughtErrors` option to `'none'` in your ESLint config +- [feat(eslint-plugin): split no-empty-object-type out from ban-types and no-empty-interface](https://github.com/typescript-eslint/typescript-eslint/pull/8977) + - If you have [`@typescript-eslint/ban-types`](/rules/ban-types) manually enabled, it will no longer ban the `{}` or `object` types; use a [recommended config](/users/configs) or manually enable [`@typescript-eslint/no-empty-object-type`](https://v8--typescript-eslint.netlify.app/rules/no-empty-object-type) + - If you have [`@typescript-eslint/no-empty-interface`](/rules/no-empty-interface) manually enabled, remove that, and instead either use a [recommended config](/users/configs) or manually enable [`@typescript-eslint/no-empty-object-type`](https://v8--typescript-eslint.netlify.app/rules/no-empty-object-type) + +### Tooling Breaking Changes + +- ⏳ [Enhancement: Error if configuration options aren't provided as expected](https://github.com/typescript-eslint/typescript-eslint/issues/6403) + - This should only cause errors if you had an invalid config. +- [fix(typescript-estree): enable dot globs for project by default](https://github.com/typescript-eslint/typescript-eslint/pull/8818) + - This will cause any `parserOptions.project` globs to match dot (`.`) directories. + If you don't want to match them then use a more specific set of globs, or switch to `parserOptions.projectService`. +- [feat(typescript-estree): remove slow deprecated and isolated programs](https://github.com/typescript-eslint/typescript-eslint/pull/8834) + - If you were still using `parserOptions.DEPRECATED__createDefaultProgram`, switch to `parserOptions.projectService` _(recommended)_ or `parserOptions.project`. +- [feat(typescript-estree): rename automaticSingleRunInference to disallowAutomaticSingleRunInference](https://github.com/typescript-eslint/typescript-eslint/pull/8922) + - We've updated the default to be an opt-out - meaning you no longer need to enable it: + ```js + parserOptions: { + // Remove this line + automaticSingleRunInference: true, + // ... + } + ``` +- [chore: bump minimum versions for v8](https://github.com/typescript-eslint/typescript-eslint/pull/8973) + - ESLint support range was changed from `^8.56.0` to `^8.57.0` + - Node.js support range was changed from `^18.18.0 || >=20.0.0` to `^18.18.0 || ^20.9.0 || >=21.1.0` + - TypeScript support range was changed from `>=4.7.4 <5.5.0` to `>=4.8.4 <5.5.0` + +## Developer-Facing Changes + +typescript-eslint v8 comes with a suite of cleanups and improvements for developers using its Node.js APIs as well. +If you author any ESLint plugins or other tools that interact with TypeScript syntax, then we recommend you try out typescript-eslint v8 soon. +It includes some breaking changes that you may need to accommodate for. + +:::tip +If you're having trouble working with the changes, please let us know on [the typescript-eslint Discord](https://discord.gg/FSxKq8Tdyg)'s `#v8` channel! +::: + +### AST Breaking Changes + +These changes are to the AST shapes generated by typescript-eslint when parsing code. +If you author any ESLint rules that refer to the syntax mentioned by them, these are relevant to you. + +- ⏳ [Enhancement: add strict parent types for nodes that have well-defined parents](https://github.com/typescript-eslint/typescript-eslint/issues/6225) + - This will help you remove some unnecessary conditions - we suggest using `@typescript-eslint/no-unnecessary-condition` to help find the unnecessary checks! +- [feat(typescript-estree): split TSMappedType typeParameter into constraint and key](https://github.com/typescript-eslint/typescript-eslint/pull/7065) + - If your code handles mapped types, change from `node.typeParameter.constraint` to `node.constraint` and from `node.typeParameter.name` to `node.key` +- [feat(ast-spec): remove deprecated type params](https://github.com/typescript-eslint/typescript-eslint/pull/8933) + - If you haven't already you must stop using those removed AST properties that were already marked as `@deprecated` + +### Custom Rule `meta.docs` Types + +`@typescript-eslint/utils` has long exported a [`RuleCreator` utility](https://typescript-eslint.io/developers/custom-rules#rulecreator) for making custom well-typed custom ESLint rules. +That `RuleCreator` is used internally by `@typescript-eslint/eslint-plugin` β€” and in fact, up through typescript-eslint v7, it hardcoded the same types for rules' `meta.docs` as `@typescript-eslint/eslint-plugin`! + +In typescript-eslint v8, we've made two changes to `RuleCreator`: + +- Rule `meta.docs` by default only allows the properties defined in ESLint's [Custom Rules > Rule Structure docs](https://eslint.org/docs/latest/extend/custom-rules#rule-structure): `description` and `url` +- `RuleCreator` allows an optional type parameter to specify additional allowed properties + +For example, this rule includes the common `meta.docs.recommended` property as a `boolean`: + +```ts +interface MyPluginDocs { + recommended: boolean; +} + +const createRule = ESLintUtils.RuleCreator( + name => `https://example.com/rule/${name}`, +); + +createRule({ + // ... + meta: { + docs: { + description: '...', + recommended: true, + }, + // ... + }, +}); +``` + +See [feat(utils): allow specifying additional rule meta.docs in RuleCreator](https://github.com/typescript-eslint/typescript-eslint/pull/9025) for more details. + +### Support for multi-pass fixes in `RuleTester` + +The `RuleTester` provided by `@typescript-eslint/rule-tester` is a fork of ESLint's `RuleTester`. +One limitation of the original `RuleTester` is that it is not possible to verify the individual applied fixes when a rule provides multiple rounds of fixes. +[The original `RuleTester` applies only the first fix](https://eslint.org/docs/latest/integrate/nodejs-api#testing-fixes) when there is conflict between two fixes. + +In typescript-eslint v8, `RuleTester` tries to apply all possible fixes for each test case. + +If your rule tests had some test cases that required multi-pass fixes, you will see some test failures. +To fix these failures, provide an array of strings for `output` which specifies the output after each fix pass. + +```ts +import { RuleTester } from '@typescript-eslint/rule-tester'; +import rule from '../src/rules/my-rule.ts'; + +const ruleTester = new RuleTester(); + +ruleTester.run('my-rule', rule, { + valid: [ + /* ... */ + ], + invalid: [ + { + code: 'const a = 1;', + // Remove the line with string form of `output` + output: 'const b = 1;', + // Add the line with array form of `output` + output: ['const b = 1;', 'const c = 1;'], + errors: [ + /* ... */ + ], + }, + ], +}); +``` + +See [[rule-tester] support multipass fixes](https://github.com/typescript-eslint/typescript-eslint/issues/8554) for more details. + +### Other Developer-Facing Breaking Changes + +- ⏳ [Repo: Rule [options] parameter should be non-nullable if defaultOptions exists](https://github.com/typescript-eslint/typescript-eslint/issues/5439) +- [feat(parser): always enable comment, loc, range, tokens](https://github.com/typescript-eslint/typescript-eslint/pull/8617) + - If you were manually calling `@typescript-eslint/parser` functions, those options are no longer necessary to provide +- [chore(type-utils)!: remove IsNullableTypeOptions interface](https://github.com/typescript-eslint/typescript-eslint/pull/8934) + - If you were using `isNullableType`, you can omit its section parameter +- [feat(utils): swap LegacyESLint out for FlatESLint as ESLint export](https://github.com/typescript-eslint/typescript-eslint/pull/8972) + - If you still need to use the class corresponding to legacy ("eslintrc") configs, switch from importing `ESLint` to `LegacyESLint` +- [chore(type-utils): remove getTypeArguments](https://github.com/typescript-eslint/typescript-eslint/pull/8938) + - If you were using `getTypeArguments`, call a TypeScript type checker's `checker.getTypeArguments` instead +- [feat(utils): remove deprecated context helpers](https://github.com/typescript-eslint/typescript-eslint/pull/9000) + - You should consider dropping support for older ESLint versions and migrate to the new APIs. + +## Appreciation + +We'd like to extend a sincere _thank you_ to everybody who pitched in to make typescript-eslint v8 possible. + +- Ourselves on the maintenance team: + - [Auvred](https://github.com/auvred) + - [Armano](https://github.com/armano2) + - [Brad Zacher](https://github.com/bradzacher) + - [James Henry](https://github.com/JamesHenry) + - [Josh Goldberg](https://github.com/JoshuaKGoldberg) + - [Joshua Chen](https://github.com/Josh-Cena) + - [Kirk Waiblinger](https://github.com/kirkwaiblinger) +- Community contributors whose PRs were merged into the 8.0.0 release: + + - [Abraham Guo](https://github.com/abrahamguo) + - [Collin Bachman](https://github.com/bachmacintosh) + - [Thomas HuchedΓ©](https://github.com/thuchede) + - [Yukihiro Hasegawa](https://github.com/y-hsgw) + - _(more to come as PRs are merged!)_ + + +See the [v8.0.0 milestone](https://github.com/typescript-eslint/typescript-eslint/milestone/9) for the list of issues and associated merged pull requests. + +## Supporting typescript-eslint + +If you enjoyed this blog post and/or use typescript-eslint, please consider [supporting us on Open Collective](https://opencollective.com/typescript-eslint). +We're a small volunteer team and could use your support to make the ESLint experience on TypeScript great. +Thanks! πŸ’–