create-next-stack
create-next-stack copied to clipboard
Support for ESLint (Properly)
To do:
- [ ] Switch to
@typescript-eslint
.- [ ] Make ESLint CNS plugin install and add parser
@typescript-eslint/parser
to.eslintrc.cjs
. - [ ] Make ESLint CNS plugin install and add plugin
@typescript-eslint/eslint-plugin
to.eslintrc.cjs
.
- [ ] Make ESLint CNS plugin install and add parser
- [ ] Make it possible to choose between the official configurations.
- [ ] Make ESLint CNS plugin install and add config
eslint-config-prettier
to.eslintrc.cjs
if Prettier is used. - [ ] Make it possible to choose between ESLint configs
next
andnext/core-web-vitals
.-
next
:next
is an alias fornext/recommended
which includes Next-specific linting rules, but also bundles other useful ESLint plugins likeimport
,react
,react-hooks
andjsx-a11y
, and Next-specific overrides of these plugins. See theeslint-plugin-next
source. -
next/core-web-vitals
: Extendsnext/recommended
, turning a couple core web vitals-specific ESLint rules from warnings into errors. See thecore-web-vitals
config source.
-
See the typescript-eslint configuration docs, mainly this quote:
We recommend that most projects should extend from one of:
recommended
: Recommended rules for code correctness that you can drop in without additional configuration.recommended-type-checked
: Containsrecommended
+ additional recommended rules that require type information.strict
: Containsrecommended
+ additional strict rules that can also catch bugs but are more opinionated than recommended rules.strict-type-checked
: Containsstrict
+ additional strict rules require type information.Additionally, we provide a stylistic config that enforces concise and consistent code. We recommend that most projects should extend from either:
stylistic
: Stylistic rules you can drop in without additional configuration.stylistic-type-checked
: Containsstylistic
+ additional stylistic rules that require type information.
Example setup using @typescript-eslint/parser
and @typescript-eslint/plugin
as well as typed versions of both strict
and stylistic
:
/** @type {import("eslint").Linter.Config} */
const config = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: true,
},
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/strict-type-checked',
'plugin:@typescript-eslint/stylistic-type-checked',
'next/core-web-vitals',
'prettier',
],
};
module.exports = config;