eslint-config-ts-strict
Version:
Very strict ESLint config for projects using TypeScript, React and Prettier. ESLint v9 flat config only. Formatting rules disabled to prevent Prettier conflicts.
194 lines (164 loc) • 5.95 kB
JavaScript
export default {
rules: {
// enforces no braces where they can be omitted
// https://eslint.org/docs/rules/arrow-body-style
// TODO: enable requireReturnForObjectLiteral?
"arrow-body-style": [
"error",
"as-needed",
{
requireReturnForObjectLiteral: false,
},
],
// require parens in arrow function arguments
// https://eslint.org/docs/rules/arrow-parens
// PRETTIER CONFLICT: This rule conflicts with Prettier formatting
"arrow-parens": "off",
// require space before/after arrow function's arrow
// https://eslint.org/docs/rules/arrow-spacing
// PRETTIER CONFLICT: This rule conflicts with Prettier formatting
"arrow-spacing": "off",
// verify super() callings in constructors
"constructor-super": "error",
// enforce the spacing around the * in generator functions
// https://eslint.org/docs/rules/generator-star-spacing
// PRETTIER CONFLICT: This rule conflicts with Prettier formatting
"generator-star-spacing": "off",
// disallow modifying variables of class declarations
// https://eslint.org/docs/rules/no-class-assign
"no-class-assign": "error",
// disallow arrow functions where they could be confused with comparisons
// https://eslint.org/docs/rules/no-confusing-arrow
"no-confusing-arrow": [
"error",
{
allowParens: true,
},
],
// disallow modifying variables that are declared using const
"no-const-assign": "error",
// disallow symbol constructor
// https://eslint.org/docs/rules/no-new-symbol
"no-new-symbol": "error",
// Disallow specified names in exports
// https://eslint.org/docs/rules/no-restricted-exports
"no-restricted-exports": [
"error",
{
restrictedNamedExports: [
"default", // use `export default` to provide a default export
"then", // this will cause tons of confusion when your module is dynamically `import()`ed, and will break in most node ESM versions
],
},
],
// disallow to use this/super before super() calling in constructors.
// https://eslint.org/docs/rules/no-this-before-super
"no-this-before-super": "error",
// disallow useless computed property keys
// https://eslint.org/docs/rules/no-useless-computed-key
"no-useless-computed-key": "error",
// disallow renaming import, export, and destructured assignments to the same name
// https://eslint.org/docs/rules/no-useless-rename
"no-useless-rename": [
"error",
{
ignoreDestructuring: false,
ignoreImport: false,
ignoreExport: false,
},
],
// require let or const instead of var
"no-var": "error",
// require method and property shorthand syntax for object literals
// https://eslint.org/docs/rules/object-shorthand
"object-shorthand": [
"error",
"always",
{
ignoreConstructors: false,
avoidQuotes: true,
},
],
// suggest using arrow functions as callbacks
"prefer-arrow-callback": [
"error",
{
allowNamedFunctions: false,
allowUnboundThis: true,
},
],
// suggest using of const declaration for variables that are never modified after declared
"prefer-const": [
"error",
{
destructuring: "any",
ignoreReadBeforeAssign: true,
},
],
// Prefer destructuring from arrays and objects
// https://eslint.org/docs/rules/prefer-destructuring
"prefer-destructuring": [
"error",
{
VariableDeclarator: {
array: false,
object: true,
},
AssignmentExpression: {
array: true,
object: false,
},
},
{
enforceForRenamedProperties: false,
},
],
// disallow parseInt() in favor of binary, octal, and hexadecimal literals
// https://eslint.org/docs/rules/prefer-numeric-literals
"prefer-numeric-literals": "error",
// suggest using Reflect methods where applicable
// https://eslint.org/docs/rules/prefer-reflect
"prefer-reflect": "off",
// use rest parameters instead of arguments
// https://eslint.org/docs/rules/prefer-rest-params
"prefer-rest-params": "error",
// suggest using the spread syntax instead of .apply()
// https://eslint.org/docs/rules/prefer-spread
"prefer-spread": "error",
// suggest using template literals instead of string concatenation
// https://eslint.org/docs/rules/prefer-template
"prefer-template": "error",
// disallow generator functions that do not have yield
// https://eslint.org/docs/rules/require-yield
"require-yield": "error",
// enforce spacing between object rest-spread
// https://eslint.org/docs/rules/rest-spread-spacing
// PRETTIER CONFLICT: This rule conflicts with Prettier formatting
"rest-spread-spacing": "off",
// import sorting
// https://eslint.org/docs/rules/sort-imports
"sort-imports": [
"off",
{
ignoreCase: false,
ignoreDeclarationSort: false,
ignoreMemberSort: false,
memberSyntaxSortOrder: ["none", "all", "multiple", "single"],
},
],
// require a Symbol description
// https://eslint.org/docs/rules/symbol-description
"symbol-description": "error",
// enforce usage of spacing in template strings
// https://eslint.org/docs/rules/template-curly-spacing
// PRETTIER CONFLICT: This rule conflicts with Prettier formatting
"template-curly-spacing": "off",
// enforce spacing around the * in yield* expressions
// https://eslint.org/docs/rules/yield-star-spacing
// PRETTIER CONFLICT: This rule conflicts with Prettier formatting
"yield-star-spacing": "off",
// New rules still not included
"no-empty-static-block": "off",
"no-new-native-nonconstructor": "off",
},
};