diff --git a/.eslintrc.js b/.eslintrc.js index b1b6b4cff..994ce1c12 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -18,9 +18,8 @@ module.exports = { ecmaFeatures: { jsx: true }, - sourceType: "module", - project: "./tsconfig.json", - projects: ["./tsconfig.json"], + project: "/tsconfig.json", + projects: ["/tsconfig.json"], }, plugins: [ diff --git a/Dockerfile b/Dockerfile index 77f6953d5..5c99af957 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,4 +26,4 @@ RUN npm install --legacy-peer-deps --omit=dev &&\ WORKDIR /src -CMD ["node", "--max-semi-space-size=64", "--max-old-space-size=2304", "--v8-pool-size=0", "--use-largepages=silent", "/dist/src/index.js"] +CMD ["node", "--max-semi-space-size=64", "--max-old-space-size=2560", "--v8-pool-size=0", "--use-largepages=silent", "/dist/src/index.js"] diff --git a/README.md b/README.md index 37b8562b2..bac8f1a45 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # Codacy ESLint +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/88324e5ee7464c62abe07115b884c6a9)](https://app.codacy.com/gh/codacy/codacy-eslint/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) +[![CircleCI](https://circleci.com/gh/codacy/codacy-eslint.svg?style=svg)](https://circleci.com/gh/codacy/codacy-eslint) + ## Adding new plugins / configs 1. Install the package using npm: diff --git a/docs/description/@angular-eslint_no-output-rename.md b/docs/description/@angular-eslint_no-output-rename.md index 733aa2a79..ac8617f3a 100644 --- a/docs/description/@angular-eslint_no-output-rename.md +++ b/docs/description/@angular-eslint_no-output-rename.md @@ -725,6 +725,105 @@ class Test { #### ✅ Valid Code +```ts +@Component({ + selector: 'foo', + hostDirectives: [{ + directive: CdkMenuItem, + outputs: ['cdkMenuItemTriggered: triggered'], + }] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + selector: 'foo', + 'hostDirectives': [{ + directive: CdkMenuItem, + outputs: ['cdkMenuItemTriggered: triggered'], + }] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + selector: 'foo', + ['hostDirectives']: [{ + directive: CdkMenuItem, + outputs: ['cdkMenuItemTriggered: triggered'], + }] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```ts @Directive({ selector: 'foo' diff --git a/docs/description/@angular-eslint_no-outputs-metadata-property.md b/docs/description/@angular-eslint_no-outputs-metadata-property.md index e8b5b73a4..600025b9c 100644 --- a/docs/description/@angular-eslint_no-outputs-metadata-property.md +++ b/docs/description/@angular-eslint_no-outputs-metadata-property.md @@ -489,6 +489,105 @@ class Test {} class Test {} ``` +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-outputs-metadata-property": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + selector: 'foo', + hostDirectives: [{ + directive: CdkMenuItem, + outputs: ['cdkMenuItemTriggered: triggered'], + }] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-outputs-metadata-property": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + selector: 'foo', + 'hostDirectives': [{ + directive: CdkMenuItem, + outputs: ['cdkMenuItemTriggered: triggered'], + }] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-outputs-metadata-property": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + selector: 'foo', + ['hostDirectives']: [{ + directive: CdkMenuItem, + outputs: ['cdkMenuItemTriggered: triggered'], + }] +}) +class Test {} +``` +
diff --git a/docs/description/@angular-eslint_require-localize-metadata.md b/docs/description/@angular-eslint_require-localize-metadata.md new file mode 100644 index 000000000..98b1cee44 --- /dev/null +++ b/docs/description/@angular-eslint_require-localize-metadata.md @@ -0,0 +1,699 @@ + + +
+ +# `@angular-eslint/require-localize-metadata` + +Ensures that $localize tagged messages contain helpful metadata to aid with translations. + +- Type: suggestion + +
+ +## Rule Options + +The rule accepts an options object with the following properties: + +```ts +interface Options { + requireDescription?: boolean; + requireMeaning?: boolean; +} + +``` + +
+ +## Usage Examples + +> The following examples are generated automatically from the actual unit tests within the plugin, so you can be assured that their behavior is accurate based on the current commit. + +
+ +
+❌ - Toggle examples of incorrect code for this rule + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`Hello i18n!`; + ~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedTexts = { + helloI18n: $localize`:An introduction header for this sample:Hello i18n!` +}; +localizedTexts.helloI18n = $localize`Hello i18n!`; + ~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +return $localize`Hello i18n!`; + ~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +someFunction($localize`Hello i18n!`); + ~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`:site header|:Hello i18n!`; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`:@@custom_id:Hello i18n!`; + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`:site header|@@custom_id:Hello i18n!`; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireMeaning": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`Hello i18n!`; + ~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true, + "requireMeaning": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`:An introduction header for this sample:Hello i18n!`; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireMeaning": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`:|An introduction header for this sample:Hello i18n!`; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true, + "requireMeaning": true + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +const localizedText = $localize`:Hello i18n!`; + ~~~~~~~~~~~~~~ +``` + +
+ +
+ +--- + +
+ +
+✅ - Toggle examples of correct code for this rule + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = $localize`Hello i18n!`; +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = $localize`:site header|:Hello i18n!`; +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = $localize`:@@custom_id:Hello i18n!`; +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = $localize`:site header|@@custom_id:Hello i18n!`; +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +let localizedText = $localize\`:An introduction header for this sample:Hello i18n!\`; +localizedText = $localize\`:An introduction header for this sample modified:Hello i18n modified!\`; +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedTexts = { + helloI18n: $localize\`:An introduction header for this sample:Hello i18n!\` +}; +localizedTexts.helloI18n = $localize\`:An introduction header for this sample modified:Hello i18n modified!\`; +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +return $localize\`:An introduction header for this sample:Hello i18n!\`; +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +someFunction($localize\`:An introduction header for this sample:Hello i18n!\`); +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = \`Hello i18n!\`; +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireMeaning": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = $localize\`:site header|:Hello i18n!\`; +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/require-localize-metadata": [ + "error", + { + "requireDescription": true, + "requireMeaning": true + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +const localizedText = $localize\`:site header|An introduction header for this sample:Hello i18n!\`; +``` + +
+ +
diff --git a/docs/description/@typescript-eslint_block-spacing.md b/docs/description/@typescript-eslint_block-spacing.md index 6a902214b..9e6ac779d 100644 --- a/docs/description/@typescript-eslint_block-spacing.md +++ b/docs/description/@typescript-eslint_block-spacing.md @@ -6,7 +6,5 @@ description: 'Disallow or enforce spaces inside of blocks after opening block an > > See **https://typescript-eslint.io/rules/block-spacing** for documentation. -## Examples - This rule extends the base [`eslint/block-spacing`](https://eslint.org/docs/rules/block-spacing) rule. This version adds support for TypeScript related blocks (interfaces, object type literals and enums). diff --git a/docs/description/@typescript-eslint_brace-style.md b/docs/description/@typescript-eslint_brace-style.md index 4e032c805..66f39643d 100644 --- a/docs/description/@typescript-eslint_brace-style.md +++ b/docs/description/@typescript-eslint_brace-style.md @@ -6,7 +6,5 @@ description: 'Enforce consistent brace style for blocks.' > > See **https://typescript-eslint.io/rules/brace-style** for documentation. -## Examples - This rule extends the base [`eslint/brace-style`](https://eslint.org/docs/rules/brace-style) rule. It adds support for `enum`, `interface`, `namespace` and `module` declarations. diff --git a/docs/description/@typescript-eslint_class-methods-use-this.md b/docs/description/@typescript-eslint_class-methods-use-this.md new file mode 100644 index 000000000..cf0c20cc6 --- /dev/null +++ b/docs/description/@typescript-eslint_class-methods-use-this.md @@ -0,0 +1,55 @@ +--- +description: 'Enforce that class methods utilize `this`.' +--- + +> 🛑 This file is source code, not the primary documentation location! 🛑 +> +> See **https://typescript-eslint.io/rules/class-methods-use-this** for documentation. + +This rule extends the base [`eslint/class-methods-use-this`](https://eslint.org/docs/rules/class-methods-use-this) rule. +It adds support for ignoring `override` methods or methods on classes that implement an interface. + +## Options + +This rule adds the following options: + +```ts +interface Options extends BaseClassMethodsUseThisOptions { + ignoreOverrideMethods?: boolean; + ignoreClassesThatImplementAnInterface?: boolean; +} + +const defaultOptions: Options = { + ...baseClassMethodsUseThisOptions, + ignoreOverrideMethods: false, + ignoreClassesThatImplementAnInterface: false, +}; +``` + +### `ignoreOverrideMethods` + +Makes the rule to ignores any class member explicitly marked with `override`. + +Example of a correct code when `ignoreOverrideMethods` is set to `true`: + +```ts +class X { + override method() {} + override property = () => {}; +} +``` + +### `ignoreClassesThatImplementAnInterface` + +Makes the rule ignore all class members that are defined within a class that `implements` a type. + +It's important to note that this option does not only apply to members defined in the interface as that would require type information. + +Example of a correct code when `ignoreClassesThatImplementAnInterface` is set to `true`: + +```ts +class X implements Y { + method() {} + property = () => {}; +} +``` diff --git a/docs/description/@typescript-eslint_comma-dangle.md b/docs/description/@typescript-eslint_comma-dangle.md index d25ec9e0c..80057954f 100644 --- a/docs/description/@typescript-eslint_comma-dangle.md +++ b/docs/description/@typescript-eslint_comma-dangle.md @@ -6,8 +6,6 @@ description: 'Require or disallow trailing commas.' > > See **https://typescript-eslint.io/rules/comma-dangle** for documentation. -## Examples - This rule extends the base [`eslint/comma-dangle`](https://eslint.org/docs/rules/comma-dangle) rule. It adds support for TypeScript syntax. diff --git a/docs/description/@typescript-eslint_comma-spacing.md b/docs/description/@typescript-eslint_comma-spacing.md index 9d5424811..ccbd46842 100644 --- a/docs/description/@typescript-eslint_comma-spacing.md +++ b/docs/description/@typescript-eslint_comma-spacing.md @@ -6,7 +6,5 @@ description: 'Enforce consistent spacing before and after commas.' > > See **https://typescript-eslint.io/rules/comma-spacing** for documentation. -## Examples - This rule extends the base [`eslint/comma-spacing`](https://eslint.org/docs/rules/comma-spacing) rule. It adds support for trailing comma in a types parameters list. diff --git a/docs/description/@typescript-eslint_default-param-last.md b/docs/description/@typescript-eslint_default-param-last.md index e5902b200..62c388901 100644 --- a/docs/description/@typescript-eslint_default-param-last.md +++ b/docs/description/@typescript-eslint_default-param-last.md @@ -6,8 +6,6 @@ description: 'Enforce default parameters to be last.' > > See **https://typescript-eslint.io/rules/default-param-last** for documentation. -## Examples - This rule extends the base [`eslint/default-param-last`](https://eslint.org/docs/rules/default-param-last) rule. It adds support for optional parameters. diff --git a/docs/description/@typescript-eslint_dot-notation.md b/docs/description/@typescript-eslint_dot-notation.md index e48e2c9a9..9a40445a8 100644 --- a/docs/description/@typescript-eslint_dot-notation.md +++ b/docs/description/@typescript-eslint_dot-notation.md @@ -6,8 +6,6 @@ description: 'Enforce dot notation whenever possible.' > > See **https://typescript-eslint.io/rules/dot-notation** for documentation. -## Examples - This rule extends the base [`eslint/dot-notation`](https://eslint.org/docs/rules/dot-notation) rule. It adds: diff --git a/docs/description/@typescript-eslint_func-call-spacing.md b/docs/description/@typescript-eslint_func-call-spacing.md index c30bbface..d9acf9fa9 100644 --- a/docs/description/@typescript-eslint_func-call-spacing.md +++ b/docs/description/@typescript-eslint_func-call-spacing.md @@ -6,7 +6,5 @@ description: 'Require or disallow spacing between function identifiers and their > > See **https://typescript-eslint.io/rules/func-call-spacing** for documentation. -## Examples - This rule extends the base [`eslint/func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing) rule. It adds support for generic type parameters on function calls. diff --git a/docs/description/@typescript-eslint_init-declarations.md b/docs/description/@typescript-eslint_init-declarations.md index da086da83..3a456d36b 100644 --- a/docs/description/@typescript-eslint_init-declarations.md +++ b/docs/description/@typescript-eslint_init-declarations.md @@ -6,7 +6,5 @@ description: 'Require or disallow initialization in variable declarations.' > > See **https://typescript-eslint.io/rules/init-declarations** for documentation. -## Examples - This rule extends the base [`eslint/init-declarations`](https://eslint.org/docs/rules/init-declarations) rule. It adds support for TypeScript's `declare` variables. diff --git a/docs/description/@typescript-eslint_key-spacing.md b/docs/description/@typescript-eslint_key-spacing.md index 35108c28f..4a0884d60 100644 --- a/docs/description/@typescript-eslint_key-spacing.md +++ b/docs/description/@typescript-eslint_key-spacing.md @@ -6,7 +6,5 @@ description: 'Enforce consistent spacing between property names and type annotat > > See **https://typescript-eslint.io/rules/key-spacing** for documentation. -## Examples - This rule extends the base [`eslint/key-spacing`](https://eslint.org/docs/rules/key-spacing) rule. -This version adds support for type annotations on interfaces, classes and type literals properties. +It adds support for type annotations on interfaces, classes and type literals properties. diff --git a/docs/description/@typescript-eslint_keyword-spacing.md b/docs/description/@typescript-eslint_keyword-spacing.md index 5fe8888ff..a57774b5b 100644 --- a/docs/description/@typescript-eslint_keyword-spacing.md +++ b/docs/description/@typescript-eslint_keyword-spacing.md @@ -6,7 +6,5 @@ description: 'Enforce consistent spacing before and after keywords.' > > See **https://typescript-eslint.io/rules/keyword-spacing** for documentation. -## Examples - This rule extends the base [`eslint/keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing) rule. -This version adds support for generic type parameters on function calls. +It adds support for generic type parameters on function calls. diff --git a/docs/description/@typescript-eslint_lines-around-comment.md b/docs/description/@typescript-eslint_lines-around-comment.md index a3fbb5579..33a04c78f 100644 --- a/docs/description/@typescript-eslint_lines-around-comment.md +++ b/docs/description/@typescript-eslint_lines-around-comment.md @@ -6,8 +6,6 @@ description: 'Require empty lines around comments.' > > See **https://typescript-eslint.io/rules/lines-around-comment** for documentation. -## Rule Details - This rule extends the base [`eslint/lines-around-comment`](https://eslint.org/docs/rules/lines-around-comment) rule. It adds support for TypeScript syntax. diff --git a/docs/description/@typescript-eslint_member-ordering.md b/docs/description/@typescript-eslint_member-ordering.md index b4d1e217b..ee1696766 100644 --- a/docs/description/@typescript-eslint_member-ordering.md +++ b/docs/description/@typescript-eslint_member-ordering.md @@ -814,7 +814,7 @@ interface Foo { #### Sorting Alphabetically Case Insensitive Within Member Groups -This config specifies that within each `memberTypes` group, members are in an alphabetic case-sensitive order. +This config specifies that within each `memberTypes` group, members are in an alphabetic case-insensitive order. You can copy and paste the default order from [Default Configuration](#default-configuration). ```jsonc diff --git a/docs/description/@typescript-eslint_no-array-constructor.md b/docs/description/@typescript-eslint_no-array-constructor.md index c6b147752..5cf1d0602 100644 --- a/docs/description/@typescript-eslint_no-array-constructor.md +++ b/docs/description/@typescript-eslint_no-array-constructor.md @@ -6,8 +6,6 @@ description: 'Disallow generic `Array` constructors.' > > See **https://typescript-eslint.io/rules/no-array-constructor** for documentation. -## Examples - This rule extends the base [`eslint/no-array-constructor`](https://eslint.org/docs/rules/no-array-constructor) rule. It adds support for the generically typed `Array` constructor (`new Array()`). diff --git a/docs/description/@typescript-eslint_no-dupe-class-members.md b/docs/description/@typescript-eslint_no-dupe-class-members.md index 432ac55f0..3b0f00d33 100644 --- a/docs/description/@typescript-eslint_no-dupe-class-members.md +++ b/docs/description/@typescript-eslint_no-dupe-class-members.md @@ -6,7 +6,5 @@ description: 'Disallow duplicate class members.' > > See **https://typescript-eslint.io/rules/no-dupe-class-members** for documentation. -## Examples - This rule extends the base [`eslint/no-dupe-class-members`](https://eslint.org/docs/rules/no-dupe-class-members) rule. It adds support for TypeScript's method overload definitions. diff --git a/docs/description/@typescript-eslint_no-duplicate-type-constituents.md b/docs/description/@typescript-eslint_no-duplicate-type-constituents.md index 879d0c6ca..c240bd458 100644 --- a/docs/description/@typescript-eslint_no-duplicate-type-constituents.md +++ b/docs/description/@typescript-eslint_no-duplicate-type-constituents.md @@ -10,8 +10,6 @@ TypeScript supports types ("constituents") within union and intersection types b However, developers typically expect each constituent to be unique within its intersection or union. Duplicate values make the code overly verbose and generally reduce readability. -## Rule Details - This rule disallows duplicate union or intersection constituents. We consider types to be duplicate if they evaluate to the same result in the type system. For example, given `type A = string` and `type T = string | A`, this rule would flag that `A` is the same type as `string`. diff --git a/docs/description/@typescript-eslint_no-empty-function.md b/docs/description/@typescript-eslint_no-empty-function.md index 529a8a2df..c7f253b44 100644 --- a/docs/description/@typescript-eslint_no-empty-function.md +++ b/docs/description/@typescript-eslint_no-empty-function.md @@ -6,8 +6,6 @@ description: 'Disallow empty functions.' > > See **https://typescript-eslint.io/rules/no-empty-function** for documentation. -## Examples - This rule extends the base [`eslint/no-empty-function`](https://eslint.org/docs/rules/no-empty-function) rule. It adds support for handling TypeScript specific code that would otherwise trigger the rule. diff --git a/docs/description/@typescript-eslint_no-extra-parens.md b/docs/description/@typescript-eslint_no-extra-parens.md index 0c5cc2194..e0afc6573 100644 --- a/docs/description/@typescript-eslint_no-extra-parens.md +++ b/docs/description/@typescript-eslint_no-extra-parens.md @@ -6,7 +6,5 @@ description: 'Disallow unnecessary parentheses.' > > See **https://typescript-eslint.io/rules/no-extra-parens** for documentation. -## Examples - This rule extends the base [`eslint/no-extra-parens`](https://eslint.org/docs/rules/no-extra-parens) rule. It adds support for TypeScript type assertions. diff --git a/docs/description/@typescript-eslint_no-extra-semi.md b/docs/description/@typescript-eslint_no-extra-semi.md index 086bd87f4..c2d75c86a 100644 --- a/docs/description/@typescript-eslint_no-extra-semi.md +++ b/docs/description/@typescript-eslint_no-extra-semi.md @@ -6,7 +6,5 @@ description: 'Disallow unnecessary semicolons.' > > See **https://typescript-eslint.io/rules/no-extra-semi** for documentation. -## Examples - This rule extends the base [`eslint/no-extra-semi`](https://eslint.org/docs/rules/no-extra-semi) rule. It adds support for class properties. diff --git a/docs/description/@typescript-eslint_no-floating-promises.md b/docs/description/@typescript-eslint_no-floating-promises.md index 246a50be0..d0204c810 100644 --- a/docs/description/@typescript-eslint_no-floating-promises.md +++ b/docs/description/@typescript-eslint_no-floating-promises.md @@ -58,7 +58,7 @@ returnsPromise().then( Promise.reject('value').catch(() => {}); -Promise.reject('value').finally(() => {}); +await Promise.reject('value').finally(() => {}); ``` ## Options diff --git a/docs/description/@typescript-eslint_no-invalid-this.md b/docs/description/@typescript-eslint_no-invalid-this.md index 4d6abe81f..9ce45891f 100644 --- a/docs/description/@typescript-eslint_no-invalid-this.md +++ b/docs/description/@typescript-eslint_no-invalid-this.md @@ -6,7 +6,5 @@ description: 'Disallow `this` keywords outside of classes or class-like objects. > > See **https://typescript-eslint.io/rules/no-invalid-this** for documentation. -## Examples - This rule extends the base [`eslint/no-invalid-this`](https://eslint.org/docs/rules/no-invalid-this) rule. It adds support for TypeScript's `this` parameters. diff --git a/docs/description/@typescript-eslint_no-loop-func.md b/docs/description/@typescript-eslint_no-loop-func.md index e2ba64a8e..9060422c9 100644 --- a/docs/description/@typescript-eslint_no-loop-func.md +++ b/docs/description/@typescript-eslint_no-loop-func.md @@ -6,7 +6,5 @@ description: 'Disallow function declarations that contain unsafe references insi > > See **https://typescript-eslint.io/rules/no-loop-func** for documentation. -## Examples - This rule extends the base [`eslint/no-loop-func`](https://eslint.org/docs/rules/no-loop-func) rule. It adds support for TypeScript types. diff --git a/docs/description/@typescript-eslint_no-loss-of-precision.md b/docs/description/@typescript-eslint_no-loss-of-precision.md index f8db7ef60..fb93f3819 100644 --- a/docs/description/@typescript-eslint_no-loss-of-precision.md +++ b/docs/description/@typescript-eslint_no-loss-of-precision.md @@ -6,7 +6,5 @@ description: 'Disallow literal numbers that lose precision.' > > See **https://typescript-eslint.io/rules/no-loss-of-precision** for documentation. -## Examples - This rule extends the base [`eslint/no-loss-of-precision`](https://eslint.org/docs/rules/no-loss-of-precision) rule. It adds support for [numeric separators](https://github.com/tc39/proposal-numeric-separator). diff --git a/docs/description/@typescript-eslint_no-magic-numbers.md b/docs/description/@typescript-eslint_no-magic-numbers.md index 258af4dd4..47a5fbd30 100644 --- a/docs/description/@typescript-eslint_no-magic-numbers.md +++ b/docs/description/@typescript-eslint_no-magic-numbers.md @@ -6,8 +6,6 @@ description: 'Disallow magic numbers.' > > See **https://typescript-eslint.io/rules/no-magic-numbers** for documentation. -## Examples - This rule extends the base [`eslint/no-magic-numbers`](https://eslint.org/docs/rules/no-magic-numbers) rule. It adds support for: diff --git a/docs/description/@typescript-eslint_no-redeclare.md b/docs/description/@typescript-eslint_no-redeclare.md index faef21466..5496aa905 100644 --- a/docs/description/@typescript-eslint_no-redeclare.md +++ b/docs/description/@typescript-eslint_no-redeclare.md @@ -6,8 +6,6 @@ description: 'Disallow variable redeclaration.' > > See **https://typescript-eslint.io/rules/no-redeclare** for documentation. -## Examples - This rule extends the base [`eslint/no-redeclare`](https://eslint.org/docs/rules/no-redeclare) rule. It adds support for TypeScript function overloads, and declaration merging. diff --git a/docs/description/@typescript-eslint_no-restricted-imports.md b/docs/description/@typescript-eslint_no-restricted-imports.md index 900a9cdd0..551a2c250 100644 --- a/docs/description/@typescript-eslint_no-restricted-imports.md +++ b/docs/description/@typescript-eslint_no-restricted-imports.md @@ -6,8 +6,6 @@ description: 'Disallow specified modules when loaded by `import`.' > > See **https://typescript-eslint.io/rules/no-restricted-imports** for documentation. -## Examples - This rule extends the base [`eslint/no-restricted-imports`](https://eslint.org/docs/rules/no-restricted-imports) rule. ## Options diff --git a/docs/description/@typescript-eslint_no-shadow.md b/docs/description/@typescript-eslint_no-shadow.md index 1dfadba55..2623eeca6 100644 --- a/docs/description/@typescript-eslint_no-shadow.md +++ b/docs/description/@typescript-eslint_no-shadow.md @@ -6,8 +6,6 @@ description: 'Disallow variable declarations from shadowing variables declared i > > See **https://typescript-eslint.io/rules/no-shadow** for documentation. -## Examples - This rule extends the base [`eslint/no-shadow`](https://eslint.org/docs/rules/no-shadow) rule. It adds support for TypeScript's `this` parameters and global augmentation, and adds options for TypeScript features. diff --git a/docs/description/@typescript-eslint_no-unnecessary-condition.md b/docs/description/@typescript-eslint_no-unnecessary-condition.md index 8e052f237..f4e429751 100644 --- a/docs/description/@typescript-eslint_no-unnecessary-condition.md +++ b/docs/description/@typescript-eslint_no-unnecessary-condition.md @@ -97,6 +97,22 @@ If for some reason you cannot turn on `strictNullChecks`, but still want to use The main downside to using this rule is the need for type information. +This rule has a known edge case of triggering on conditions that were modified within function calls (as side effects). +It is due to limitations of TypeScript's type narrowing. +See [#9998](https://github.com/microsoft/TypeScript/issues/9998) for details. + +We recommend upcasting the variable with a [type assertion](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions). + +```ts +let condition = false as boolean; + +const f = () => (condition = true); +f(); + +if (condition) { +} +``` + ## Related To - ESLint: [no-constant-condition](https://eslint.org/docs/rules/no-constant-condition) - `no-unnecessary-condition` is essentially a stronger version of `no-constant-condition`, but requires type information. diff --git a/docs/description/@typescript-eslint_no-unused-expressions.md b/docs/description/@typescript-eslint_no-unused-expressions.md index 4e439431d..6bec1ef7d 100644 --- a/docs/description/@typescript-eslint_no-unused-expressions.md +++ b/docs/description/@typescript-eslint_no-unused-expressions.md @@ -6,7 +6,5 @@ description: 'Disallow unused expressions.' > > See **https://typescript-eslint.io/rules/no-unused-expressions** for documentation. -## Examples - This rule extends the base [`eslint/no-unused-expressions`](https://eslint.org/docs/rules/no-unused-expressions) rule. It adds support for optional call expressions `x?.()`, and directive in module declarations. diff --git a/docs/description/@typescript-eslint_no-unused-vars.md b/docs/description/@typescript-eslint_no-unused-vars.md index 8fd90f74a..eef57d383 100644 --- a/docs/description/@typescript-eslint_no-unused-vars.md +++ b/docs/description/@typescript-eslint_no-unused-vars.md @@ -6,7 +6,22 @@ description: 'Disallow unused variables.' > > See **https://typescript-eslint.io/rules/no-unused-vars** for documentation. -## Examples - This rule extends the base [`eslint/no-unused-vars`](https://eslint.org/docs/rules/no-unused-vars) rule. It adds support for TypeScript features, such as types. + +## Benefits Over TypeScript + +TypeScript provides [`noUnusedLocals`](https://www.typescriptlang.org/tsconfig#noUnusedLocals) and [`noUnusedParameters`](https://www.typescriptlang.org/tsconfig#noUnusedParameters) compiler options that can report errors on unused local variables or parameters, respectively. +Those compiler options can be convenient to use if you don't want to set up ESLint and typescript-eslint. +However: + +- These lint rules are more configurable than TypeScript's compiler options. + - For example, the [`varsIgnorePattern` option](https://eslint.org/docs/latest/rules/no-unused-vars#varsignorepattern) can customize what names are always allowed to be exempted. TypeScript hardcodes its exemptions to names starting with `_`. +- [ESLint can be configured](https://eslint.org/docs/latest/use/configure/rules) within lines, files, and folders. TypeScript compiler options are linked to their TSConfig file. +- Many projects configure TypeScript's reported errors to block builds more aggressively than ESLint complaints. Blocking builds on unused variables can be inconvenient. + +We generally recommend using `@typescript-eslint/no-unused-vars` to flag unused locals and parameters instead of TypeScript. + +:::tip +Editors such as VS Code will still generally "grey out" unused variables even if `noUnusedLocals` and `noUnusedParameters` are not enabled in a project. +::: diff --git a/docs/description/@typescript-eslint_no-use-before-define.md b/docs/description/@typescript-eslint_no-use-before-define.md index 035065834..3f36ef746 100644 --- a/docs/description/@typescript-eslint_no-use-before-define.md +++ b/docs/description/@typescript-eslint_no-use-before-define.md @@ -6,8 +6,6 @@ description: 'Disallow the use of variables before they are defined.' > > See **https://typescript-eslint.io/rules/no-use-before-define** for documentation. -## Examples - This rule extends the base [`eslint/no-use-before-define`](https://eslint.org/docs/rules/no-use-before-define) rule. It adds support for `type`, `interface` and `enum` declarations. diff --git a/docs/description/@typescript-eslint_no-useless-constructor.md b/docs/description/@typescript-eslint_no-useless-constructor.md index 0f570ab9e..df0e3ecce 100644 --- a/docs/description/@typescript-eslint_no-useless-constructor.md +++ b/docs/description/@typescript-eslint_no-useless-constructor.md @@ -6,8 +6,6 @@ description: 'Disallow unnecessary constructors.' > > See **https://typescript-eslint.io/rules/no-useless-constructor** for documentation. -## Examples - This rule extends the base [`eslint/no-useless-constructor`](https://eslint.org/docs/rules/no-useless-constructor) rule. It adds support for: diff --git a/docs/description/@typescript-eslint_object-curly-spacing.md b/docs/description/@typescript-eslint_object-curly-spacing.md index 1b333cae4..91b242137 100644 --- a/docs/description/@typescript-eslint_object-curly-spacing.md +++ b/docs/description/@typescript-eslint_object-curly-spacing.md @@ -6,7 +6,5 @@ description: 'Enforce consistent spacing inside braces.' > > See **https://typescript-eslint.io/rules/object-curly-spacing** for documentation. -## Examples - This rule extends the base [`eslint/object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing) rule. It adds support for TypeScript's object types. diff --git a/docs/description/@typescript-eslint_padding-line-between-statements.md b/docs/description/@typescript-eslint_padding-line-between-statements.md index 5387cacac..6d2904e57 100644 --- a/docs/description/@typescript-eslint_padding-line-between-statements.md +++ b/docs/description/@typescript-eslint_padding-line-between-statements.md @@ -6,8 +6,6 @@ description: 'Require or disallow padding lines between statements.' > > See **https://typescript-eslint.io/rules/padding-line-between-statements** for documentation. -## Examples - This rule extends the base [`eslint/padding-line-between-statements`](https://eslint.org/docs/rules/padding-line-between-statements) rule. It adds support for TypeScript constructs such as `interface` and `type`. diff --git a/docs/description/@typescript-eslint_prefer-nullish-coalescing.md b/docs/description/@typescript-eslint_prefer-nullish-coalescing.md index 451f7dff1..7c2f45a87 100644 --- a/docs/description/@typescript-eslint_prefer-nullish-coalescing.md +++ b/docs/description/@typescript-eslint_prefer-nullish-coalescing.md @@ -22,7 +22,7 @@ This rule will not work as expected if [`strictNullChecks`](https://www.typescri ### `ignoreTernaryTests` -Setting this option to `true` (the default) will cause the rule to ignore any ternary expressions that could be simplified by using the nullish coalescing operator. +Setting this option to `true` will cause the rule to ignore any ternary expressions that could be simplified by using the nullish coalescing operator. This is set to `false` by default. Incorrect code for `ignoreTernaryTests: false`, and correct code for `ignoreTernaryTests: true`: @@ -62,7 +62,7 @@ foo ?? 'a string'; ### `ignoreConditionalTests` -Setting this option to `true` (the default) will cause the rule to ignore any cases that are located within a conditional test. +Setting this option to `true` will cause the rule to ignore any cases that are located within a conditional test. This is set to `false` by default. Generally expressions within conditional tests intentionally use the falsy fallthrough behavior of the logical or operator, meaning that fixing the operator to the nullish coalesce operator could cause bugs. @@ -104,7 +104,7 @@ a ?? b ? true : false; ### `ignoreMixedLogicalExpressions` -Setting this option to `true` (the default) will cause the rule to ignore any logical or expressions that are part of a mixed logical expression (with `&&`). +Setting this option to `true` will cause the rule to ignore any logical or expressions that are part of a mixed logical expression (with `&&`). This is set to `false` by default. Generally expressions within mixed logical expressions intentionally use the falsy fallthrough behavior of the logical or operator, meaning that fixing the operator to the nullish coalesce operator could cause bugs. @@ -165,6 +165,8 @@ const foo: string | undefined = 'bar'; foo ?? 'a string'; ``` +Also, if you would like to ignore all primitives types, you can set `ignorePrimitives: true`. It would be equivalent to `ignorePrimitives: { string: true, number: true, bigint: true, boolean: true }`. + ## When Not To Use It If you are not using TypeScript 3.7 (or greater), then you will not be able to use this rule, as the operator is not supported. diff --git a/docs/description/@typescript-eslint_quotes.md b/docs/description/@typescript-eslint_quotes.md index b67c5dc89..62c6051c4 100644 --- a/docs/description/@typescript-eslint_quotes.md +++ b/docs/description/@typescript-eslint_quotes.md @@ -6,7 +6,5 @@ description: 'Enforce the consistent use of either backticks, double, or single > > See **https://typescript-eslint.io/rules/quotes** for documentation. -## Examples - This rule extends the base [`eslint/quotes`](https://eslint.org/docs/rules/quotes) rule. It adds support for TypeScript features which allow quoted names, but not backtick quoted names. diff --git a/docs/description/@typescript-eslint_require-await.md b/docs/description/@typescript-eslint_require-await.md index dcc86305d..e2ca2af1d 100644 --- a/docs/description/@typescript-eslint_require-await.md +++ b/docs/description/@typescript-eslint_require-await.md @@ -6,11 +6,11 @@ description: 'Disallow async functions which have no `await` expression.' > > See **https://typescript-eslint.io/rules/require-await** for documentation. -## Examples - This rule extends the base [`eslint/require-await`](https://eslint.org/docs/rules/require-await) rule. It uses type information to add support for `async` functions that return a `Promise`. +## Examples + Examples of **correct** code for this rule: ```ts diff --git a/docs/description/@typescript-eslint_return-await.md b/docs/description/@typescript-eslint_return-await.md index 205c0eb0e..bf1c60ecd 100644 --- a/docs/description/@typescript-eslint_return-await.md +++ b/docs/description/@typescript-eslint_return-await.md @@ -8,11 +8,11 @@ description: 'Enforce consistent returning of awaited values.' Returning an awaited promise can make sense for better stack trace information as well as for consistent error handling (returned promises will not be caught in an async function try/catch). -## Examples - This rule builds on top of the [`eslint/no-return-await`](https://eslint.org/docs/rules/no-return-await) rule. It expands upon the base rule to add support for optionally requiring `return await` in certain cases. +The extended rule is named `return-await` instead of `no-return-await` because the extended rule can enforce the positive or the negative. Additionally, while the core rule is now deprecated, the extended rule is still useful in many contexts. + ## Options ```ts diff --git a/docs/description/@typescript-eslint_semi.md b/docs/description/@typescript-eslint_semi.md index 16622a1d8..da30f0d9d 100644 --- a/docs/description/@typescript-eslint_semi.md +++ b/docs/description/@typescript-eslint_semi.md @@ -6,10 +6,6 @@ description: 'Require or disallow semicolons instead of ASI.' > > See **https://typescript-eslint.io/rules/semi** for documentation. -This rule enforces consistent use of semicolons after statements. - -## Examples - This rule extends the base [`eslint/semi`](https://eslint.org/docs/rules/semi) rule. It adds support for TypeScript features that require semicolons. diff --git a/docs/description/@typescript-eslint_space-before-blocks.md b/docs/description/@typescript-eslint_space-before-blocks.md index 716de2294..60a24043d 100644 --- a/docs/description/@typescript-eslint_space-before-blocks.md +++ b/docs/description/@typescript-eslint_space-before-blocks.md @@ -6,8 +6,6 @@ description: 'Enforce consistent spacing before blocks.' > > See **https://typescript-eslint.io/rules/space-before-blocks** for documentation. -## Examples - This rule extends the base [`eslint/space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks) rule. It adds support for interfaces and enums. diff --git a/docs/description/@typescript-eslint_space-before-function-paren.md b/docs/description/@typescript-eslint_space-before-function-paren.md index f2c1b5e84..92180ced2 100644 --- a/docs/description/@typescript-eslint_space-before-function-paren.md +++ b/docs/description/@typescript-eslint_space-before-function-paren.md @@ -6,7 +6,5 @@ description: 'Enforce consistent spacing before function parenthesis.' > > See **https://typescript-eslint.io/rules/space-before-function-paren** for documentation. -## Examples - This rule extends the base [`eslint/space-before-function-paren`](https://eslint.org/docs/rules/space-before-function-paren) rule. It adds support for generic type parameters on function calls. diff --git a/docs/description/constructor-super.md b/docs/description/constructor-super.md index 93019eb2a..c172b0a7c 100644 --- a/docs/description/constructor-super.md +++ b/docs/description/constructor-super.md @@ -69,3 +69,5 @@ class A extends B { ## When Not To Use It If you don't want to be notified about invalid/missing `super()` callings in constructors, you can safely disable this rule. + +It is safe to disable this rule when using TypeScript because TypeScript's compiler enforces this check (`ts(2335) & ts(2377)`). diff --git a/docs/description/description.json b/docs/description/description.json index ec0f1993e..9db23b145 100644 --- a/docs/description/description.json +++ b/docs/description/description.json @@ -1144,7 +1144,12 @@ "timeToFix": 5 }, { - "parameters": [], + "parameters": [ + { + "name": "allowObjectPatternsAsParameters", + "description": "allowObjectPatternsAsParameters" + } + ], "patternId": "no-empty-pattern", "title": "No empty pattern", "description": "Disallow empty destructuring patterns", @@ -2560,7 +2565,7 @@ "parameters": [], "patternId": "require-unicode-regexp", "title": "Require unicode regexp", - "description": "Enforce the use of `u` flag on RegExp", + "description": "Enforce the use of `u` or `v` flag on RegExp", "timeToFix": 5 }, { @@ -3101,6 +3106,13 @@ "description": "Prefer to declare `@Output` as `readonly` since they are not supposed to be reassigned", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "@angular-eslint_prefer-standalone-component", + "title": "@angular eslint: Prefer standalone component", + "description": "Ensures component `standalone` property is set to `true` in the component decorator", + "timeToFix": 5 + }, { "parameters": [], "patternId": "@angular-eslint_relative-url-prefix", @@ -3108,6 +3120,22 @@ "description": "The ./ and ../ prefix is standard syntax for relative URLs; don't depend on Angular's current ability to do without that prefix. See more at https://angular.io/styleguide#style-05-04", "timeToFix": 5 }, + { + "parameters": [ + { + "name": "requireDescription", + "description": "requireDescription" + }, + { + "name": "requireMeaning", + "description": "requireMeaning" + } + ], + "patternId": "@angular-eslint_require-localize-metadata", + "title": "@angular eslint: Require localize metadata", + "description": "Ensures that $localize tagged messages contain helpful metadata to aid with translations.", + "timeToFix": 5 + }, { "parameters": [ { @@ -3617,6 +3645,18 @@ "description": "Enforce that literals on classes are exposed in a consistent style", "timeToFix": 5 }, + { + "parameters": [ + { + "name": "enforceForClassFields", + "description": "enforceForClassFields" + } + ], + "patternId": "@typescript-eslint_class-methods-use-this", + "title": "@typescript eslint: Class methods use this", + "description": "Enforce that class methods utilize `this`", + "timeToFix": 5 + }, { "parameters": [], "patternId": "@typescript-eslint_comma-dangle", @@ -3877,18 +3917,6 @@ "description": "Disallow duplicate enum member values", "timeToFix": 5 }, - { - "parameters": [ - { - "name": "includeExports", - "description": "includeExports" - } - ], - "patternId": "@typescript-eslint_no-duplicate-imports", - "title": "@typescript eslint: No duplicate imports", - "description": "Disallow duplicate imports", - "timeToFix": 5 - }, { "parameters": [], "patternId": "@typescript-eslint_no-duplicate-type-constituents", @@ -3966,13 +3994,6 @@ "description": "Disallow iterating over an array with a for-in loop", "timeToFix": 5 }, - { - "parameters": [], - "patternId": "@typescript-eslint_no-implicit-any-catch", - "title": "@typescript eslint: No implicit any catch", - "description": "Disallow usage of the implicit `any` type in catch clauses", - "timeToFix": 5 - }, { "parameters": [], "patternId": "@typescript-eslint_no-implied-eval", @@ -4403,7 +4424,7 @@ "parameters": [], "patternId": "@typescript-eslint_prefer-nullish-coalescing", "title": "@typescript eslint: Prefer nullish coalescing", - "description": "Enforce using the nullish coalescing operator instead of logical chaining", + "description": "Enforce using the nullish coalescing operator instead of logical assignments or chaining", "timeToFix": 5 }, { @@ -4525,13 +4546,6 @@ "description": "Enforce constituents of a type union/intersection to be sorted alphabetically", "timeToFix": 5 }, - { - "parameters": [], - "patternId": "@typescript-eslint_sort-type-union-intersection-members", - "title": "@typescript eslint: Sort type union intersection members", - "description": "Enforce members of a type union/intersection to be sorted alphabetically", - "timeToFix": 5 - }, { "parameters": [], "patternId": "@typescript-eslint_space-before-blocks", @@ -4955,6 +4969,118 @@ "title": "Angular: Window service", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "awscdk_require-bucket-encryption", + "title": "Awscdk: Require bucket encryption", + "description": "Encryption should be enabled for all S3 buckets", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_require-bucket-private", + "title": "Awscdk: Require bucket private", + "description": "Buckets should not be public", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-public-ingress", + "title": "Awscdk: No public ingress", + "description": "Security Group rules should not allow access from anywhere", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-iam-star-actions", + "title": "Awscdk: No iam star actions", + "description": "Buckets should not be public", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-iam-admin-permissions", + "title": "Awscdk: No iam admin permissions", + "description": "Buckets should not be public", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-policy-allow-kms-decrypt", + "title": "Awscdk: No policy allow kms decrypt", + "description": "Buckets should not be public", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_require-bucket-ssl", + "title": "Awscdk: Require bucket ssl", + "description": "This checks whether S3 buckets have policies that require requests to use Secure Socket Layer (SSL)", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_require-dynamodb-ptr", + "title": "Awscdk: Require dynamodb ptr", + "description": "DynamoDB tables should have point-in-time recovery enabled.", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_require-sns-topic-encryption", + "title": "Awscdk: Require sns topic encryption", + "description": "SNS Topics should be encrypted at rest using AWS KMS", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_require-dynamodb-autoscale", + "title": "Awscdk: Require dynamodb autoscale", + "description": "This control passes if the table uses either on-demand capacity mode or provisioned mode\n with auto scaling configured.\n\n Scaling capacity with demand avoids throttling exceptions, which helps to maintain availability of your applications.", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-rds-public-access", + "title": "Awscdk: No rds public access", + "description": "AWS RDS instances should not be publicly available", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-kms-key-delete", + "title": "Awscdk: No kms key delete", + "description": "KMS Keys should not be scheduled for deletion", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-s3-public-write", + "title": "Awscdk: No s3 public write", + "description": "Buckets should not allow public write access", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-s3-public-read", + "title": "Awscdk: No s3 public read", + "description": "Buckets should not allow public read access", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_require-cloudfront-default-root-object", + "title": "Awscdk: Require cloudfront default root object", + "description": "This control checks whether an Amazon CloudFront distribution is configured to return a specific object that is the default root object.", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "awscdk_no-redshift-public-access", + "title": "Awscdk: No redshift public access", + "description": "AWS Redshift instances should not be publicly available", + "timeToFix": 5 + }, { "parameters": [], "patternId": "backbone_collection-model", @@ -5088,6 +5214,69 @@ "description": "Styles are sorted alphabetically.", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "cdk_ban-lambda-runtimes", + "title": "Cdk: Ban lambda runtimes", + "description": "Bans specific lambda runtimes from being used", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_ban-reserved-words", + "title": "Cdk: Ban reserved words", + "description": "Bans specific words from being used", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_construct-ctor", + "title": "Cdk: Construct ctor", + "description": "Ensure a uniform construct constructors signature", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_filename-match-regex", + "title": "Cdk: Filename match regex", + "description": "Enforces all linted files to match a certain pattern", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_no-static-import", + "title": "Cdk: No static import", + "description": "Enforce cdk guidelines", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_construct-props-struct-name", + "title": "Cdk: Construct props struct name", + "description": "Ensure a uniform construct constructors signature", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_public-static-property-all-caps", + "title": "Cdk: Public static property all caps", + "description": "Enforces all static properties must be named using ALL_CAPS", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_stack-props-struct-name", + "title": "Cdk: Stack props struct name", + "description": "Ensure a uniform stack constructors signature", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "cdk_prefer-type-only-imports", + "title": "Cdk: Prefer type only imports", + "description": "Enforce type only imports", + "timeToFix": 5 + }, { "parameters": [], "patternId": "chai-expect_no-inner-compare", @@ -5124,6 +5313,31 @@ "description": "Disallow unused expressions", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "codeceptjs_no-actor-in-scenario", + "title": "Codeceptjs: No actor in scenario", + "description": "Disallow the use of Actor directly in Scenarios in favor of page objects", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "codeceptjs_no-exclusive-tests", + "title": "Codeceptjs: No exclusive tests", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "codeceptjs_no-skipped-tests", + "title": "Codeceptjs: No skipped tests", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "codeceptjs_no-pause-in-scenario", + "title": "Codeceptjs: No pause in scenario", + "timeToFix": 5 + }, { "parameters": [], "patternId": "compat_compat", @@ -5131,6 +5345,20 @@ "description": "Ensure cross-browser API compatibility", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "css-modules_no-unused-class", + "title": "Css modules: No unused class", + "description": "Checks that you are using all css/scss/less classes", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "css-modules_no-undef-class", + "title": "Css modules: No undef class", + "description": "Checks that you are using the existent css/scss/less classes", + "timeToFix": 5 + }, { "parameters": [], "patternId": "cypress_no-assigning-return-values", @@ -5139,7 +5367,12 @@ "timeToFix": 5 }, { - "parameters": [], + "parameters": [ + { + "name": "methods", + "description": "methods" + } + ], "patternId": "cypress_unsafe-to-chain-command", "title": "Cypress: Unsafe to chain command", "description": "Actions should be in the end of chains, not in the middle", @@ -7102,6 +7335,13 @@ "description": "Disallow the new values of RegExp Unicode property escape sequences in ES2023", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "es-x_no-regexp-v-flag", + "title": "Es x: No regexp v flag", + "description": "Disallow RegExp `v` flag.", + "timeToFix": 5 + }, { "parameters": [], "patternId": "es-x_no-regexp-y-flag", @@ -7442,7 +7682,7 @@ "parameters": [], "patternId": "eslint-plugin_prefer-message-ids", "title": "Eslint plugin: Prefer message ids", - "description": "Require using `messageId` instead of `message` to report rule violations", + "description": "Require using `messageId` instead of `message` or `desc` to report rule violations", "timeToFix": 5 }, { @@ -10204,6 +10444,30 @@ "description": "Disallow parsing errors in Vue custom blocks", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "jsx_uses-factory", + "title": "Jsx: Uses factory", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "jsx_factory-in-scope", + "title": "Jsx: Factory in scope", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "jsx_mark-used-vars", + "title": "Jsx: Mark used vars", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "jsx_no-undef", + "title": "Jsx: No undef", + "timeToFix": 5 + }, { "parameters": [], "patternId": "jsx-a11y_accessible-emoji", @@ -10508,6 +10772,13 @@ "description": "Disallows invalid binding positions in templates", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "lit_lifecycle-super", + "title": "Lit: Lifecycle super", + "description": "Enforces calling `super` in lifecycle methods", + "timeToFix": 5 + }, { "parameters": [], "patternId": "lit_no-duplicate-template-bindings", @@ -11277,163 +11548,136 @@ "title": "Monorepo: No relative import", "timeToFix": 5 }, - { - "parameters": [ - { - "name": "block", - "description": "block" - }, - { - "name": "focus", - "description": "focus" - }, - { - "name": "fix", - "description": "fix" - } - ], - "patternId": "no-only-tests_no-only-tests", - "title": "No only tests: No only tests", - "description": "Disallow .only blocks in tests", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "no-unsanitized_property", - "title": "No unsanitized: Property", - "description": "ESLint rule to disallow unsanitized property assignment", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "no-unsanitized_method", - "title": "No unsanitized: Method", - "description": "ESLint rule to disallow unsanitized method calls", - "timeToFix": 5 - }, { "parameters": [], - "patternId": "node_callback-return", - "title": "Node: Callback return", + "patternId": "n_callback-return", + "title": "N: Callback return", "description": "Require `return` statements after callbacks", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_exports-style", - "title": "Node: Exports style", + "patternId": "n_exports-style", + "title": "N: Exports style", "description": "Enforce either `module.exports` or `exports`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_file-extension-in-import", - "title": "Node: File extension in import", + "patternId": "n_file-extension-in-import", + "title": "N: File extension in import", "description": "Enforce the style of file extensions in `import` declarations", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_global-require", - "title": "Node: Global require", + "patternId": "n_global-require", + "title": "N: Global require", "description": "Require `require()` calls to be placed at top-level module scope", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_handle-callback-err", - "title": "Node: Handle callback err", + "patternId": "n_handle-callback-err", + "title": "N: Handle callback err", "description": "Require error handling in callbacks", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-callback-literal", - "title": "Node: No callback literal", - "description": "Ensure Node.js-style error-first callback pattern is followed", + "patternId": "n_no-callback-literal", + "title": "N: No callback literal", + "description": "Enforce Node.js-style error-first callback pattern is followed", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-deprecated-api", - "title": "Node: No deprecated api", + "patternId": "n_no-deprecated-api", + "title": "N: No deprecated api", "description": "Disallow deprecated APIs", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-exports-assign", - "title": "Node: No exports assign", + "patternId": "n_no-exports-assign", + "title": "N: No exports assign", "description": "Disallow the assignment to `exports`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-extraneous-import", - "title": "Node: No extraneous import", + "patternId": "n_no-extraneous-import", + "title": "N: No extraneous import", "description": "Disallow `import` declarations which import extraneous modules", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-extraneous-require", - "title": "Node: No extraneous require", + "patternId": "n_no-extraneous-require", + "title": "N: No extraneous require", "description": "Disallow `require()` expressions which import extraneous modules", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-missing-import", - "title": "Node: No missing import", + "patternId": "n_no-missing-import", + "title": "N: No missing import", "description": "Disallow `import` declarations which import non-existence modules", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-mixed-requires", - "title": "Node: No mixed requires", + "patternId": "n_no-missing-require", + "title": "N: No missing require", + "description": "Disallow `require()` expressions which import non-existence modules", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "n_no-mixed-requires", + "title": "N: No mixed requires", "description": "Disallow `require` calls to be mixed with regular variable declarations", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-new-require", - "title": "Node: No new require", + "patternId": "n_no-new-require", + "title": "N: No new require", "description": "Disallow `new` operators with calls to `require`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-path-concat", - "title": "Node: No path concat", + "patternId": "n_no-path-concat", + "title": "N: No path concat", "description": "Disallow string concatenation with `__dirname` and `__filename`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-process-env", - "title": "Node: No process env", + "patternId": "n_no-process-env", + "title": "N: No process env", "description": "Disallow the use of `process.env`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-process-exit", - "title": "Node: No process exit", + "patternId": "n_no-process-exit", + "title": "N: No process exit", "description": "Disallow the use of `process.exit()`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-restricted-import", - "title": "Node: No restricted import", - "description": "Disallow specified modules when loaded by `require`", + "patternId": "n_no-restricted-import", + "title": "N: No restricted import", + "description": "Disallow specified modules when loaded by `import` declarations", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-restricted-require", - "title": "Node: No restricted require", + "patternId": "n_no-restricted-require", + "title": "N: No restricted require", "description": "Disallow specified modules when loaded by `require`", "timeToFix": 5 }, @@ -11444,159 +11688,198 @@ "description": "allowAtRootLevel" } ], - "patternId": "node_no-sync", - "title": "Node: No sync", + "patternId": "n_no-sync", + "title": "N: No sync", "description": "Disallow synchronous methods", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-unpublished-bin", - "title": "Node: No unpublished bin", + "patternId": "n_no-unpublished-bin", + "title": "N: No unpublished bin", "description": "Disallow `bin` files that npm ignores", "timeToFix": 5 }, { - "parameters": [], - "patternId": "node_no-unpublished-import", - "title": "Node: No unpublished import", + "parameters": [ + { + "name": "ignoreTypeImport", + "description": "ignoreTypeImport" + } + ], + "patternId": "n_no-unpublished-import", + "title": "N: No unpublished import", "description": "Disallow `import` declarations which import private modules", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-unpublished-require", - "title": "Node: No unpublished require", + "patternId": "n_no-unpublished-require", + "title": "N: No unpublished require", "description": "Disallow `require()` expressions which import private modules", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-unsupported-features_es-builtins", - "title": "Node: [No unsupported features] Es builtins", + "patternId": "n_no-unsupported-features_es-builtins", + "title": "N: [No unsupported features] Es builtins", "description": "Disallow unsupported ECMAScript built-ins on the specified version", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-unsupported-features_es-syntax", - "title": "Node: [No unsupported features] Es syntax", + "patternId": "n_no-unsupported-features_es-syntax", + "title": "N: [No unsupported features] Es syntax", "description": "Disallow unsupported ECMAScript syntax on the specified version", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-unsupported-features_node-builtins", - "title": "Node: [No unsupported features] Node builtins", + "patternId": "n_no-unsupported-features_node-builtins", + "title": "N: [No unsupported features] Node builtins", "description": "Disallow unsupported Node.js built-in APIs on the specified version", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_buffer", - "title": "Node: [Prefer global] Buffer", + "patternId": "n_prefer-global_buffer", + "title": "N: [Prefer global] Buffer", "description": "Enforce either `Buffer` or `require(\"buffer\").Buffer`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_console", - "title": "Node: [Prefer global] Console", + "patternId": "n_prefer-global_console", + "title": "N: [Prefer global] Console", "description": "Enforce either `console` or `require(\"console\")`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_process", - "title": "Node: [Prefer global] Process", + "patternId": "n_prefer-global_process", + "title": "N: [Prefer global] Process", "description": "Enforce either `process` or `require(\"process\")`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_text-decoder", - "title": "Node: [Prefer global] Text decoder", + "patternId": "n_prefer-global_text-decoder", + "title": "N: [Prefer global] Text decoder", "description": "Enforce either `TextDecoder` or `require(\"util\").TextDecoder`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_text-encoder", - "title": "Node: [Prefer global] Text encoder", + "patternId": "n_prefer-global_text-encoder", + "title": "N: [Prefer global] Text encoder", "description": "Enforce either `TextEncoder` or `require(\"util\").TextEncoder`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_url-search-params", - "title": "Node: [Prefer global] Url search params", + "patternId": "n_prefer-global_url-search-params", + "title": "N: [Prefer global] Url search params", "description": "Enforce either `URLSearchParams` or `require(\"url\").URLSearchParams`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-global_url", - "title": "Node: [Prefer global] Url", + "patternId": "n_prefer-global_url", + "title": "N: [Prefer global] Url", "description": "Enforce either `URL` or `require(\"url\").URL`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-promises_dns", - "title": "Node: [Prefer promises] Dns", + "patternId": "n_prefer-promises_dns", + "title": "N: [Prefer promises] Dns", "description": "Enforce `require(\"dns\").promises`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_prefer-promises_fs", - "title": "Node: [Prefer promises] Fs", + "patternId": "n_prefer-promises_fs", + "title": "N: [Prefer promises] Fs", "description": "Enforce `require(\"fs\").promises`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_process-exit-as-throw", - "title": "Node: Process exit as throw", - "description": "Make `process.exit()` expressions the same code path as `throw`", + "patternId": "n_process-exit-as-throw", + "title": "N: Process exit as throw", + "description": "Require that `process.exit()` expressions use the same code path as `throw`", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_shebang", - "title": "Node: Shebang", - "description": "Suggest correct usage of shebang", + "patternId": "n_shebang", + "title": "N: Shebang", + "description": "Require correct usage of shebang", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-hide-core-modules", - "title": "Node: No hide core modules", + "patternId": "n_no-hide-core-modules", + "title": "N: No hide core modules", "description": "Disallow third-party modules which are hiding core modules", "timeToFix": 5 }, { "parameters": [], - "patternId": "node_no-unsupported-features", - "title": "Node: No unsupported features", + "patternId": "n_no-unsupported-features", + "title": "N: No unsupported features", "description": "Disallow unsupported ECMAScript features on the specified version", "timeToFix": 5 }, { - "parameters": [], - "patternId": "nuxt_no-env-in-context", - "title": "Nuxt: No env in context", - "description": "Disallow `context.isServer/context.isClient` in `asyncData/fetch/nuxtServerInit`", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "nuxt_no-env-in-hooks", - "title": "Nuxt: No env in hooks", - "description": "Disallow process.server and process.client in the following lifecycle hooks: beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy and destroyed", - "timeToFix": 5 - }, - { + "parameters": [ + { + "name": "block", + "description": "block" + }, + { + "name": "focus", + "description": "focus" + }, + { + "name": "fix", + "description": "fix" + } + ], + "patternId": "no-only-tests_no-only-tests", + "title": "No only tests: No only tests", + "description": "Disallow .only blocks in tests", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "no-unsanitized_property", + "title": "No unsanitized: Property", + "description": "ESLint rule to disallow unsanitized property assignment", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "no-unsanitized_method", + "title": "No unsanitized: Method", + "description": "ESLint rule to disallow unsanitized method calls", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "nuxt_no-env-in-context", + "title": "Nuxt: No env in context", + "description": "Disallow `context.isServer/context.isClient` in `asyncData/fetch/nuxtServerInit`", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "nuxt_no-env-in-hooks", + "title": "Nuxt: No env in hooks", + "description": "Disallow process.server and process.client in the following lifecycle hooks: beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy and destroyed", + "timeToFix": 5 + }, + { "parameters": [], "patternId": "nuxt_no-globals-in-created", "title": "Nuxt: No globals in created", @@ -12118,6 +12401,13 @@ "description": "Enforce valid `expect()` usage", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "prefer-arrow_prefer-arrow-functions", + "title": "Prefer arrow: Prefer arrow functions", + "description": "Prefer arrow functions", + "timeToFix": 5 + }, { "parameters": [], "patternId": "prefer-object-spread_prefer-object-spread", @@ -12223,63 +12513,6 @@ "title": "Promise: No multiple resolved", "timeToFix": 5 }, - { - "parameters": [], - "patternId": "react-hooks_rules-of-hooks", - "title": "React hooks: Rules of hooks", - "description": "Enforces the Rules of Hooks", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-hooks_exhaustive-deps", - "title": "React hooks: Exhaustive deps", - "description": "Verifies the list of dependencies for Hooks like useEffect and similar", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_no-unused-styles", - "title": "React native: No unused styles", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_no-inline-styles", - "title": "React native: No inline styles", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_no-color-literals", - "title": "React native: No color literals", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_sort-styles", - "title": "React native: Sort styles", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_split-platform-components", - "title": "React native: Split platform components", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_no-raw-text", - "title": "React native: No raw text", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "react-native_no-single-element-style-arrays", - "title": "React native: No single element style arrays", - "description": "Disallow single element style arrays. These cause unnecessary re-renders as the identity of the array always changes", - "timeToFix": 5 - }, { "parameters": [ { @@ -12773,6 +13006,135 @@ "description": "Disallow void DOM elements (e.g. ``, `
`) from receiving children", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "react-hooks_rules-of-hooks", + "title": "React hooks: Rules of hooks", + "description": "Enforces the Rules of Hooks", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-hooks_exhaustive-deps", + "title": "React hooks: Exhaustive deps", + "description": "Verifies the list of dependencies for Hooks like useEffect and similar", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_no-unused-styles", + "title": "React native: No unused styles", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_no-inline-styles", + "title": "React native: No inline styles", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_no-color-literals", + "title": "React native: No color literals", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_sort-styles", + "title": "React native: Sort styles", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_split-platform-components", + "title": "React native: Split platform components", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_no-raw-text", + "title": "React native: No raw text", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-native_no-single-element-style-arrays", + "title": "React native: No single element style arrays", + "description": "Disallow single element style arrays. These cause unnecessary re-renders as the identity of the array always changes", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_connect-prefer-minimum-two-arguments", + "title": "React redux: Connect prefer minimum two arguments", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_connect-prefer-named-arguments", + "title": "React redux: Connect prefer named arguments", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapDispatchToProps-prefer-shorthand", + "title": "React redux: MapDispatchToProps prefer shorthand", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapDispatchToProps-returns-object", + "title": "React redux: MapDispatchToProps returns object", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapDispatchToProps-prefer-parameters-names", + "title": "React redux: MapDispatchToProps prefer parameters names", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapStateToProps-no-store", + "title": "React redux: MapStateToProps no store", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapStateToProps-prefer-hoisted", + "title": "React redux: MapStateToProps prefer hoisted", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapStateToProps-prefer-parameters-names", + "title": "React redux: MapStateToProps prefer parameters names", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_mapStateToProps-prefer-selectors", + "title": "React redux: MapStateToProps prefer selectors", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_useSelector-prefer-selectors", + "title": "React redux: UseSelector prefer selectors", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_no-unused-prop-types", + "title": "React redux: No unused prop types", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "react-redux_prefer-separate-component-file", + "title": "React redux: Prefer separate component file", + "timeToFix": 5 + }, { "parameters": [], "patternId": "redux-saga_no-yield-in-race", @@ -13409,316 +13771,266 @@ }, { "parameters": [], - "patternId": "scanjs-rules_accidental__assignment", - "title": "Scanjs rules: Accidental_assignment", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__hostname", - "title": "Scanjs rules: Assign_to_hostname", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__href", - "title": "Scanjs rules: Assign_to_href", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__location", - "title": "Scanjs rules: Assign_to_location", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__onmessage", - "title": "Scanjs rules: Assign_to_onmessage", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__pathname", - "title": "Scanjs rules: Assign_to_pathname", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__protocol", - "title": "Scanjs rules: Assign_to_protocol", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__search", - "title": "Scanjs rules: Assign_to_search", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_assign__to__src", - "title": "Scanjs rules: Assign_to_src", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_call__Function", - "title": "Scanjs rules: Call_Function", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_call__addEventListener", - "title": "Scanjs rules: Call_addEventListener", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_call__addEventListener__deviceproximity", - "title": "Scanjs rules: Call_addEventListener_deviceproximity", - "timeToFix": 5 - }, - { - "parameters": [], - "patternId": "scanjs-rules_call__addEventListener__message", - "title": "Scanjs rules: Call_addEventListener_message", + "patternId": "security_detect-unsafe-regex", + "title": "Security: Detect unsafe regex", + "description": "Detects potentially unsafe regular expressions, which may take a very long time to run, blocking the event loop.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__connect", - "title": "Scanjs rules: Call_connect", + "patternId": "security_detect-non-literal-regexp", + "title": "Security: Detect non literal regexp", + "description": "Detects \"RegExp(variable)\", which might allow an attacker to DOS your server with a long-running regular expression.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__eval", - "title": "Scanjs rules: Call_eval", + "patternId": "security_detect-non-literal-require", + "title": "Security: Detect non literal require", + "description": "Detects \"require(variable)\", which might allow an attacker to load and run arbitrary code, or access arbitrary files on disk.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__execScript", - "title": "Scanjs rules: Call_execScript", + "patternId": "security_detect-non-literal-fs-filename", + "title": "Security: Detect non literal fs filename", + "description": "Detects variable in filename argument of \"fs\" calls, which might allow an attacker to access anything on your system.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__hide", - "title": "Scanjs rules: Call_hide", + "patternId": "security_detect-eval-with-expression", + "title": "Security: Detect eval with expression", + "description": "Detects \"eval(variable)\" which can allow an attacker to run arbitrary code inside your process.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__open__remote=true", - "title": "Scanjs rules: Call_open_remote=true", + "patternId": "security_detect-pseudoRandomBytes", + "title": "Security: Detect pseudoRandomBytes", + "description": "Detects if \"pseudoRandomBytes()\" is in use, which might not give you the randomness you need and expect.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__parseFromString", - "title": "Scanjs rules: Call_parseFromString", + "patternId": "security_detect-possible-timing-attacks", + "title": "Security: Detect possible timing attacks", + "description": "Detects insecure comparisons (`==`, `!=`, `!==` and `===`), which check input sequentially.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__setAttribute__mozbrowser", - "title": "Scanjs rules: Call_setAttribute_mozbrowser", + "patternId": "security_detect-no-csrf-before-method-override", + "title": "Security: Detect no csrf before method override", + "description": "Detects Express \"csrf\" middleware setup before \"method-override\" middleware.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__setImmediate", - "title": "Scanjs rules: Call_setImmediate", + "patternId": "security_detect-buffer-noassert", + "title": "Security: Detect buffer noassert", + "description": "Detects calls to \"buffer\" with \"noAssert\" flag set.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__setInterval", - "title": "Scanjs rules: Call_setInterval", + "patternId": "security_detect-child-process", + "title": "Security: Detect child process", + "description": "Detects instances of \"child_process\" & non-literal \"exec()\" calls.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_call__setTimeout", - "title": "Scanjs rules: Call_setTimeout", + "patternId": "security_detect-disable-mustache-escape", + "title": "Security: Detect disable mustache escape", + "description": "Detects \"object.escapeMarkup = false\", which can be used with some template engines to disable escaping of HTML entities.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_identifier__indexedDB", - "title": "Scanjs rules: Identifier_indexedDB", + "patternId": "security_detect-object-injection", + "title": "Security: Detect object injection", + "description": "Detects \"variable[key]\" as a left- or right-hand assignment operand.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_identifier__localStorage", - "title": "Scanjs rules: Identifier_localStorage", + "patternId": "security_detect-new-buffer", + "title": "Security: Detect new buffer", + "description": "Detects instances of new Buffer(argument) where argument is any non-literal value.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_identifier__sessionStorage", - "title": "Scanjs rules: Identifier_sessionStorage", + "patternId": "security_detect-bidi-characters", + "title": "Security: Detect bidi characters", + "description": "Detects trojan source attacks that employ unicode bidi attacks to inject malicious code.", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_new__Function", - "title": "Scanjs rules: New_Function", + "patternId": "security-node_detect-absence-of-name-option-in-exrpress-session", + "title": "Security node: Detect absence of name option in exrpress session", + "description": "Detect the absence of name option in express session", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__addIdleObserver", - "title": "Scanjs rules: Property_addIdleObserver", + "patternId": "security-node_detect-buffer-unsafe-allocation", + "title": "Security node: Detect buffer unsafe allocation", + "description": "Buffer.allocUnsafe(size) is not safe and should not be used", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__createContextualFragment", - "title": "Scanjs rules: Property_createContextualFragment", + "patternId": "security-node_detect-child-process", + "title": "Security node: Detect child process", + "description": "Detect exec with non Literal argument", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__crypto", - "title": "Scanjs rules: Property_crypto", + "patternId": "security-node_detect-crlf", + "title": "Security node: Detect crlf", + "description": "Detect log forging attack ", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__geolocation", - "title": "Scanjs rules: Property_geolocation", + "patternId": "security-node_detect-dangerous-redirects", + "title": "Security node: Detect dangerous redirects", + "description": "Detect dangerous redirects", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__getUserMedia", - "title": "Scanjs rules: Property_getUserMedia", + "patternId": "security-node_detect-eval-with-expr", + "title": "Security node: Detect eval with expr", + "description": "Detect eval with string concatenation", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__indexedDB", - "title": "Scanjs rules: Property_indexedDB", + "patternId": "security-node_detect-html-injection", + "title": "Security node: Detect html injection", + "description": "Detect html injection", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__localStorage", - "title": "Scanjs rules: Property_localStorage", + "patternId": "security-node_detect-improper-exception-handling", + "title": "Security node: Detect improper exception handling", + "description": "Rule that detects improper exception handling", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__mgmt", - "title": "Scanjs rules: Property_mgmt", + "patternId": "security-node_detect-insecure-randomness", + "title": "Security node: Detect insecure randomness", + "description": "Detect insecure randomness via Math.random()", "timeToFix": 5 }, { "parameters": [], - "patternId": "scanjs-rules_property__sessionStorage", - "title": "Scanjs rules: Property_sessionStorage", + "patternId": "security-node_detect-non-literal-require-calls", + "title": "Security node: Detect non literal require calls", + "description": "Non literal require calls may cause an attack", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-unsafe-regex", - "title": "Security: Detect unsafe regex", - "description": "Detects potentially unsafe regular expressions, which may take a very long time to run, blocking the event loop.", + "patternId": "security-node_detect-nosql-injection", + "title": "Security node: Detect nosql injection", + "description": "Detect NOsql injection", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-non-literal-regexp", - "title": "Security: Detect non literal regexp", - "description": "Detects \"RegExp(variable)\", which might allow an attacker to DOS your server with a long-running regular expression.", + "patternId": "security-node_detect-option-multiplestatements-in-mysql", + "title": "Security node: Detect option multiplestatements in mysql", + "description": "Detect option mulitpleStatements:true in createConnection method of mysql", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-non-literal-require", - "title": "Security: Detect non literal require", - "description": "Detects \"require(variable)\", which might allow an attacker to load and run arbitrary code, or access arbitrary files on disk.", + "patternId": "security-node_detect-option-rejectunauthorized-in-nodejs-httpsrequest", + "title": "Security node: Detect option rejectunauthorized in nodejs httpsrequest", + "description": "Detect option rejectUnauthorized:false in Nodejs https request method", "timeToFix": 5 }, { - "parameters": [], - "patternId": "security_detect-non-literal-fs-filename", - "title": "Security: Detect non literal fs filename", - "description": "Detects variable in filename argument of \"fs\" calls, which might allow an attacker to access anything on your system.", + "parameters": [], + "patternId": "security-node_detect-option-unsafe-in-serialize-javascript-npm-package", + "title": "Security node: Detect option unsafe in serialize javascript npm package", + "description": "Detect opion:unsafe in serialize method in serialize-javasript npm package", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-eval-with-expression", - "title": "Security: Detect eval with expression", - "description": "Detects \"eval(variable)\" which can allow an attacker to run arbitrary code inside your process.", + "patternId": "security-node_detect-possible-timing-attacks", + "title": "Security node: Detect possible timing attacks", + "description": "Detect possible timing attacks", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-pseudoRandomBytes", - "title": "Security: Detect pseudoRandomBytes", - "description": "Detects if \"pseudoRandomBytes()\" is in use, which might not give you the randomness you need and expect.", + "patternId": "security-node_detect-runinthiscontext-method-in-nodes-vm", + "title": "Security node: Detect runinthiscontext method in nodes vm", + "description": "Detect vm.runInThisContext() method in nodes vm with non Literal argument", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-possible-timing-attacks", - "title": "Security: Detect possible timing attacks", - "description": "Detects insecure comparisons (`==`, `!=`, `!==` and `===`), which check input sequentially.", + "patternId": "security-node_detect-security-missconfiguration-cookie", + "title": "Security node: Detect security missconfiguration cookie", + "description": "Detect security missconfiguration in express cookie", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-no-csrf-before-method-override", - "title": "Security: Detect no csrf before method override", - "description": "Detects Express \"csrf\" middleware setup before \"method-override\" middleware.", + "patternId": "security-node_detect-sql-injection", + "title": "Security node: Detect sql injection", + "description": "Detect SQL injection", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-buffer-noassert", - "title": "Security: Detect buffer noassert", - "description": "Detects calls to \"buffer\" with \"noAssert\" flag set.", + "patternId": "security-node_detect-unhandled-event-errors", + "title": "Security node: Detect unhandled event errors", + "description": "Require listening to errors when using EventEmitter", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-child-process", - "title": "Security: Detect child process", - "description": "Detects instances of \"child_process\" & non-literal \"exec()\" calls.", + "patternId": "security-node_detect-unhandled-async-errors", + "title": "Security node: Detect unhandled async errors", + "description": "Handle errors in asynchronous calls", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-disable-mustache-escape", - "title": "Security: Detect disable mustache escape", - "description": "Detects \"object.escapeMarkup = false\", which can be used with some template engines to disable escaping of HTML entities.", + "patternId": "security-node_disable-ssl-across-node-server", + "title": "Security node: Disable ssl across node server", + "description": "Process.env.NODE_TLS_REJECT_UNAUTHORIZED='0' disables SSL across node server!", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-object-injection", - "title": "Security: Detect object injection", - "description": "Detects \"variable[key]\" as a left- or right-hand assignment operand.", + "patternId": "security-node_non-literal-reg-expr", + "title": "Security node: Non literal reg expr", + "description": "Non literal regural expressions may cause possible attack", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-new-buffer", - "title": "Security: Detect new buffer", - "description": "Detects instances of new Buffer(argument) where argument is any non-literal value.", + "patternId": "simple-import-sort_imports", + "title": "Simple import sort: Imports", "timeToFix": 5 }, { "parameters": [], - "patternId": "security_detect-bidi-characters", - "title": "Security: Detect bidi characters", - "description": "Detects trojan source attacks that employ unicode bidi attacks to inject malicious code.", + "patternId": "simple-import-sort_exports", + "title": "Simple import sort: Exports", "timeToFix": 5 }, { @@ -13764,7 +14076,12 @@ "timeToFix": 5 }, { - "parameters": [], + "parameters": [ + { + "name": "ignoreStrings", + "description": "ignoreStrings" + } + ], "patternId": "sonarjs_no-duplicate-string", "title": "Sonarjs: No duplicate string", "description": "String literals should not be duplicated", @@ -13972,6 +14289,13 @@ "description": "Enforce sorted import declarations within modules", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "sort-keys-custom-order-fix_sort-keys-custom-order-fix", + "title": "Sort keys custom order fix: Sort keys custom order fix", + "description": "Require object keys to be sorted", + "timeToFix": 5 + }, { "parameters": [], "patternId": "sort-keys-fix_sort-keys-fix", @@ -13979,6 +14303,12 @@ "description": "Require object keys to be sorted", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "sorting_sort-object-props", + "title": "Sorting: Sort object props", + "timeToFix": 5 + }, { "parameters": [ { @@ -14133,6 +14463,66 @@ "description": "Do not use testing-library directly on stories", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "suitescript_script-type", + "title": "Suitescript: Script type", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_api-version", + "title": "Suitescript: Api version", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_no-invalid-modules", + "title": "Suitescript: No invalid modules", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_no-extra-modules", + "title": "Suitescript: No extra modules", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_no-log-module", + "title": "Suitescript: No log module", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_log-args", + "title": "Suitescript: Log args", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_module-vars", + "title": "Suitescript: Module vars", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_no-amd-name", + "title": "Suitescript: No amd name", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_entry-points", + "title": "Suitescript: Entry points", + "timeToFix": 5 + }, + { + "parameters": [], + "patternId": "suitescript_no-module-extensions", + "title": "Suitescript: No module extensions", + "timeToFix": 5 + }, { "parameters": [], "patternId": "tailwindcss_classnames-order", @@ -14238,6 +14628,25 @@ "description": "Requires test attribute data-test-id on elements with the onSubmit property.", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "tsdoc_syntax", + "title": "Tsdoc: Syntax", + "description": "Validates that TypeScript documentation comments conform to the TSDoc standard", + "timeToFix": 5 + }, + { + "parameters": [ + { + "name": "allowList", + "description": "allowList" + } + ], + "patternId": "turbo_no-undeclared-env-vars", + "title": "Turbo: No undeclared env vars", + "description": "Do not allow the use of `process.env` without including the env key in any turbo.json", + "timeToFix": 5 + }, { "parameters": [], "patternId": "typescript-sort-keys_interface", @@ -14592,13 +15001,6 @@ "description": "Disallow unreadable IIFEs.", "timeToFix": 5 }, - { - "parameters": [], - "patternId": "unicorn_no-unsafe-regex", - "title": "Unicorn: No unsafe regex", - "description": "Disallow unsafe regular expressions.", - "timeToFix": 5 - }, { "parameters": [], "patternId": "unicorn_no-unused-properties", @@ -14744,6 +15146,12 @@ "description": "Require `new` when throwing an error.", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "unicorn_no-unsafe-regex", + "title": "Unicorn: No unsafe regex", + "timeToFix": 5 + }, { "parameters": [], "patternId": "unused-imports_no-unused-vars", @@ -14816,6 +15224,13 @@ "description": "Disallow use other than available `lang`", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "vue_block-order", + "title": "Vue: Block order", + "description": "Enforce order of component top-level elements", + "timeToFix": 5 + }, { "parameters": [], "patternId": "vue_block-spacing", @@ -15331,6 +15746,13 @@ "description": "Disallow using deprecated `inline-template` attribute (in Vue.js 3.0.0+)", "timeToFix": 5 }, + { + "parameters": [], + "patternId": "vue_no-deprecated-model-definition", + "title": "Vue: No deprecated model definition", + "description": "Disallow deprecated `model` definition (in Vue.js 3.0.0+)", + "timeToFix": 5 + }, { "parameters": [], "patternId": "vue_no-deprecated-props-default-this", @@ -15437,7 +15859,12 @@ "timeToFix": 5 }, { - "parameters": [], + "parameters": [ + { + "name": "allowObjectPatternsAsParameters", + "description": "allowObjectPatternsAsParameters" + } + ], "patternId": "vue_no-empty-pattern", "title": "Vue: No empty pattern", "description": "Disallow empty destructuring patterns in `