├── .circleci └── config.yml ├── .codacyrc ├── .dockerignore ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github ├── CODEOWNERS ├── dependabot.yml └── workflows │ ├── auto-merge.yml │ ├── comment_issue.yml │ ├── create_issue.yml │ └── create_issue_on_label.yml ├── .gitignore ├── .remarkrc ├── Dockerfile ├── LICENSE ├── README.md ├── docs ├── description │ ├── @angular-eslint_component-class-suffix.md │ ├── @angular-eslint_component-max-inline-declarations.md │ ├── @angular-eslint_component-selector.md │ ├── @angular-eslint_consistent-component-styles.md │ ├── @angular-eslint_contextual-decorator.md │ ├── @angular-eslint_contextual-lifecycle.md │ ├── @angular-eslint_directive-class-suffix.md │ ├── @angular-eslint_directive-selector.md │ ├── @angular-eslint_no-async-lifecycle-method.md │ ├── @angular-eslint_no-attribute-decorator.md │ ├── @angular-eslint_no-conflicting-lifecycle.md │ ├── @angular-eslint_no-duplicates-in-metadata-arrays.md │ ├── @angular-eslint_no-empty-lifecycle-method.md │ ├── @angular-eslint_no-forward-ref.md │ ├── @angular-eslint_no-host-metadata-property.md │ ├── @angular-eslint_no-input-prefix.md │ ├── @angular-eslint_no-input-rename.md │ ├── @angular-eslint_no-inputs-metadata-property.md │ ├── @angular-eslint_no-lifecycle-call.md │ ├── @angular-eslint_no-output-native.md │ ├── @angular-eslint_no-output-on-prefix.md │ ├── @angular-eslint_no-output-rename.md │ ├── @angular-eslint_no-outputs-metadata-property.md │ ├── @angular-eslint_no-pipe-impure.md │ ├── @angular-eslint_no-queries-metadata-property.md │ ├── @angular-eslint_pipe-prefix.md │ ├── @angular-eslint_prefer-on-push-component-change-detection.md │ ├── @angular-eslint_prefer-output-readonly.md │ ├── @angular-eslint_prefer-standalone-component.md │ ├── @angular-eslint_prefer-standalone.md │ ├── @angular-eslint_relative-url-prefix.md │ ├── @angular-eslint_require-localize-metadata.md │ ├── @angular-eslint_sort-lifecycle-methods.md │ ├── @angular-eslint_sort-ngmodule-metadata-arrays.md │ ├── @angular-eslint_use-component-selector.md │ ├── @angular-eslint_use-component-view-encapsulation.md │ ├── @angular-eslint_use-injectable-provided-in.md │ ├── @angular-eslint_use-lifecycle-interface.md │ ├── @angular-eslint_use-pipe-transform-interface.md │ ├── @babel_new-cap.md │ ├── @babel_no-invalid-this.md │ ├── @babel_no-undef.md │ ├── @babel_no-unused-expressions.md │ ├── @babel_object-curly-spacing.md │ ├── @babel_semi.md │ ├── @lwc_lwc_consistent-component-name.md │ ├── @lwc_lwc_no-api-reassignments.md │ ├── @lwc_lwc_no-async-await.md │ ├── @lwc_lwc_no-async-operation.md │ ├── @lwc_lwc_no-attributes-during-construction.md │ ├── @lwc_lwc_no-deprecated.md │ ├── @lwc_lwc_no-disallowed-lwc-imports.md │ ├── @lwc_lwc_no-document-query.md │ ├── @lwc_lwc_no-dupe-class-members.md │ ├── @lwc_lwc_no-for-of.md │ ├── @lwc_lwc_no-inner-html.md │ ├── @lwc_lwc_no-leading-uppercase-api-name.md │ ├── @lwc_lwc_no-leaky-event-listeners.md │ ├── @lwc_lwc_no-node-env-in-ssr.md │ ├── @lwc_lwc_no-rest-parameter.md │ ├── @lwc_lwc_no-restricted-browser-globals-during-ssr.md │ ├── @lwc_lwc_no-template-children.md │ ├── @lwc_lwc_no-unsupported-ssr-properties.md │ ├── @lwc_lwc_prefer-custom-event.md │ ├── @lwc_lwc_valid-api.md │ ├── @lwc_lwc_valid-graphql-wire-adapter-callback-parameters.md │ ├── @lwc_lwc_valid-track.md │ ├── @lwc_lwc_valid-wire.md │ ├── @salesforce_aura_aura-api.md │ ├── @salesforce_aura_ecma-intrinsics.md │ ├── @salesforce_aura_getevt-markup-prefix.md │ ├── @salesforce_aura_no-deprecated-aura-error.md │ ├── @salesforce_aura_no-deprecated-component-creation.md │ ├── @salesforce_aura_no-deprecated-event-creation.md │ ├── @salesforce_aura_secure-document.md │ ├── @salesforce_aura_secure-window.md │ ├── @salesforce_lightning_no-aura-localization-service.md │ ├── @salesforce_lightning_no-moment.md │ ├── @salesforce_lightning_prefer-i18n-service.md │ ├── @salesforce_lightning_valid-apex-method-invocation.md │ ├── @shopify_binary-assignment-parens.md │ ├── @shopify_class-property-semi.md │ ├── @shopify_images-no-direct-imports.md │ ├── @shopify_jest_no-all-mocks-methods.md │ ├── @shopify_jest_no-snapshots.md │ ├── @shopify_jsx-no-complex-expressions.md │ ├── @shopify_jsx-no-hardcoded-content.md │ ├── @shopify_jsx-prefer-fragment-wrappers.md │ ├── @shopify_no-ancestor-directory-import.md │ ├── @shopify_no-fully-static-classes.md │ ├── @shopify_no-namespace-imports.md │ ├── @shopify_no-useless-computed-properties.md │ ├── @shopify_polaris-no-bare-stack-item.md │ ├── @shopify_polaris-prefer-sectioned-prop.md │ ├── @shopify_prefer-class-properties.md │ ├── @shopify_prefer-early-return.md │ ├── @shopify_prefer-module-scope-constants.md │ ├── @shopify_prefer-twine.md │ ├── @shopify_react-hooks-strict-return.md │ ├── @shopify_react-initialize-state.md │ ├── @shopify_react-no-multiple-render-methods.md │ ├── @shopify_react-prefer-private-members.md │ ├── @shopify_react-require-autocomplete.md │ ├── @shopify_react-type-state.md │ ├── @shopify_restrict-full-import.md │ ├── @shopify_sinon-no-restricted-features.md │ ├── @shopify_sinon-prefer-meaningful-assertions.md │ ├── @shopify_strict-component-boundaries.md │ ├── @shopify_typescript_prefer-build-client-schema.md │ ├── @shopify_typescript_prefer-pascal-case-enums.md │ ├── @shopify_typescript_prefer-singular-enums.md │ ├── @shopify_webpack_no-unnamed-dynamic-imports.md │ ├── @stylistic_array-bracket-newline.md │ ├── @stylistic_array-bracket-spacing.md │ ├── @stylistic_array-element-newline.md │ ├── @stylistic_arrow-parens.md │ ├── @stylistic_arrow-spacing.md │ ├── @stylistic_block-spacing.md │ ├── @stylistic_brace-style.md │ ├── @stylistic_comma-dangle.md │ ├── @stylistic_comma-spacing.md │ ├── @stylistic_comma-style.md │ ├── @stylistic_computed-property-spacing.md │ ├── @stylistic_dot-location.md │ ├── @stylistic_eol-last.md │ ├── @stylistic_func-call-spacing.md │ ├── @stylistic_function-call-argument-newline.md │ ├── @stylistic_function-call-spacing.md │ ├── @stylistic_function-paren-newline.md │ ├── @stylistic_generator-star-spacing.md │ ├── @stylistic_implicit-arrow-linebreak.md │ ├── @stylistic_indent-binary-ops.md │ ├── @stylistic_indent.md │ ├── @stylistic_jsx-child-element-spacing.md │ ├── @stylistic_jsx-closing-bracket-location.md │ ├── @stylistic_jsx-closing-tag-location.md │ ├── @stylistic_jsx-curly-brace-presence.md │ ├── @stylistic_jsx-curly-newline.md │ ├── @stylistic_jsx-curly-spacing.md │ ├── @stylistic_jsx-equals-spacing.md │ ├── @stylistic_jsx-first-prop-new-line.md │ ├── @stylistic_jsx-function-call-newline.md │ ├── @stylistic_jsx-indent-props.md │ ├── @stylistic_jsx-indent.md │ ├── @stylistic_jsx-max-props-per-line.md │ ├── @stylistic_jsx-newline.md │ ├── @stylistic_jsx-one-expression-per-line.md │ ├── @stylistic_jsx-pascal-case.md │ ├── @stylistic_jsx-props-no-multi-spaces.md │ ├── @stylistic_jsx-quotes.md │ ├── @stylistic_jsx-self-closing-comp.md │ ├── @stylistic_jsx-sort-props.md │ ├── @stylistic_jsx-tag-spacing.md │ ├── @stylistic_jsx-wrap-multilines.md │ ├── @stylistic_key-spacing.md │ ├── @stylistic_keyword-spacing.md │ ├── @stylistic_line-comment-position.md │ ├── @stylistic_linebreak-style.md │ ├── @stylistic_lines-around-comment.md │ ├── @stylistic_lines-between-class-members.md │ ├── @stylistic_max-len.md │ ├── @stylistic_max-statements-per-line.md │ ├── @stylistic_member-delimiter-style.md │ ├── @stylistic_multiline-comment-style.md │ ├── @stylistic_multiline-ternary.md │ ├── @stylistic_new-parens.md │ ├── @stylistic_newline-per-chained-call.md │ ├── @stylistic_no-confusing-arrow.md │ ├── @stylistic_no-extra-parens.md │ ├── @stylistic_no-extra-semi.md │ ├── @stylistic_no-floating-decimal.md │ ├── @stylistic_no-mixed-operators.md │ ├── @stylistic_no-mixed-spaces-and-tabs.md │ ├── @stylistic_no-multi-spaces.md │ ├── @stylistic_no-multiple-empty-lines.md │ ├── @stylistic_no-tabs.md │ ├── @stylistic_no-trailing-spaces.md │ ├── @stylistic_no-whitespace-before-property.md │ ├── @stylistic_nonblock-statement-body-position.md │ ├── @stylistic_object-curly-newline.md │ ├── @stylistic_object-curly-spacing.md │ ├── @stylistic_object-property-newline.md │ ├── @stylistic_one-var-declaration-per-line.md │ ├── @stylistic_operator-linebreak.md │ ├── @stylistic_padded-blocks.md │ ├── @stylistic_padding-line-between-statements.md │ ├── @stylistic_quote-props.md │ ├── @stylistic_quotes.md │ ├── @stylistic_rest-spread-spacing.md │ ├── @stylistic_semi-spacing.md │ ├── @stylistic_semi-style.md │ ├── @stylistic_semi.md │ ├── @stylistic_space-before-blocks.md │ ├── @stylistic_space-before-function-paren.md │ ├── @stylistic_space-in-parens.md │ ├── @stylistic_space-infix-ops.md │ ├── @stylistic_space-unary-ops.md │ ├── @stylistic_spaced-comment.md │ ├── @stylistic_switch-colon-spacing.md │ ├── @stylistic_template-curly-spacing.md │ ├── @stylistic_template-tag-spacing.md │ ├── @stylistic_type-annotation-spacing.md │ ├── @stylistic_type-generic-spacing.md │ ├── @stylistic_type-named-tuple-spacing.md │ ├── @stylistic_wrap-iife.md │ ├── @stylistic_wrap-regex.md │ ├── @stylistic_yield-star-spacing.md │ ├── @tanstack_query_exhaustive-deps.md │ ├── @tanstack_query_no-rest-destructuring.md │ ├── @tanstack_query_stable-query-client.md │ ├── @typescript-eslint_adjacent-overload-signatures.md │ ├── @typescript-eslint_array-type.md │ ├── @typescript-eslint_await-thenable.md │ ├── @typescript-eslint_ban-ts-comment.md │ ├── @typescript-eslint_ban-tslint-comment.md │ ├── @typescript-eslint_ban-types.md │ ├── @typescript-eslint_block-spacing.md │ ├── @typescript-eslint_class-literal-property-style.md │ ├── @typescript-eslint_class-methods-use-this.md │ ├── @typescript-eslint_comma-dangle.md │ ├── @typescript-eslint_comma-spacing.md │ ├── @typescript-eslint_consistent-generic-constructors.md │ ├── @typescript-eslint_consistent-indexed-object-style.md │ ├── @typescript-eslint_consistent-return.md │ ├── @typescript-eslint_consistent-type-assertions.md │ ├── @typescript-eslint_consistent-type-definitions.md │ ├── @typescript-eslint_consistent-type-exports.md │ ├── @typescript-eslint_default-param-last.md │ ├── @typescript-eslint_dot-notation.md │ ├── @typescript-eslint_explicit-function-return-type.md │ ├── @typescript-eslint_explicit-member-accessibility.md │ ├── @typescript-eslint_explicit-module-boundary-types.md │ ├── @typescript-eslint_func-call-spacing.md │ ├── @typescript-eslint_init-declarations.md │ ├── @typescript-eslint_key-spacing.md │ ├── @typescript-eslint_keyword-spacing.md │ ├── @typescript-eslint_lines-around-comment.md │ ├── @typescript-eslint_max-params.md │ ├── @typescript-eslint_member-delimiter-style.md │ ├── @typescript-eslint_member-ordering.md │ ├── @typescript-eslint_method-signature-style.md │ ├── @typescript-eslint_naming-convention.md │ ├── @typescript-eslint_no-array-constructor.md │ ├── @typescript-eslint_no-array-delete.md │ ├── @typescript-eslint_no-base-to-string.md │ ├── @typescript-eslint_no-confusing-non-null-assertion.md │ ├── @typescript-eslint_no-confusing-void-expression.md │ ├── @typescript-eslint_no-dupe-class-members.md │ ├── @typescript-eslint_no-duplicate-enum-values.md │ ├── @typescript-eslint_no-duplicate-type-constituents.md │ ├── @typescript-eslint_no-dynamic-delete.md │ ├── @typescript-eslint_no-empty-function.md │ ├── @typescript-eslint_no-empty-interface.md │ ├── @typescript-eslint_no-empty-object-type.md │ ├── @typescript-eslint_no-explicit-any.md │ ├── @typescript-eslint_no-extra-non-null-assertion.md │ ├── @typescript-eslint_no-extra-parens.md │ ├── @typescript-eslint_no-extra-semi.md │ ├── @typescript-eslint_no-extraneous-class.md │ ├── @typescript-eslint_no-floating-promises.md │ ├── @typescript-eslint_no-for-in-array.md │ ├── @typescript-eslint_no-implied-eval.md │ ├── @typescript-eslint_no-import-type-side-effects.md │ ├── @typescript-eslint_no-inferrable-types.md │ ├── @typescript-eslint_no-invalid-this.md │ ├── @typescript-eslint_no-invalid-void-type.md │ ├── @typescript-eslint_no-loop-func.md │ ├── @typescript-eslint_no-loss-of-precision.md │ ├── @typescript-eslint_no-magic-numbers.md │ ├── @typescript-eslint_no-meaningless-void-operator.md │ ├── @typescript-eslint_no-misused-new.md │ ├── @typescript-eslint_no-misused-promises.md │ ├── @typescript-eslint_no-mixed-enums.md │ ├── @typescript-eslint_no-namespace.md │ ├── @typescript-eslint_no-non-null-asserted-nullish-coalescing.md │ ├── @typescript-eslint_no-non-null-asserted-optional-chain.md │ ├── @typescript-eslint_no-non-null-assertion.md │ ├── @typescript-eslint_no-redeclare.md │ ├── @typescript-eslint_no-redundant-type-constituents.md │ ├── @typescript-eslint_no-require-imports.md │ ├── @typescript-eslint_no-restricted-imports.md │ ├── @typescript-eslint_no-shadow.md │ ├── @typescript-eslint_no-this-alias.md │ ├── @typescript-eslint_no-throw-literal.md │ ├── @typescript-eslint_no-type-alias.md │ ├── @typescript-eslint_no-unnecessary-boolean-literal-compare.md │ ├── @typescript-eslint_no-unnecessary-condition.md │ ├── @typescript-eslint_no-unnecessary-parameter-property-assignment.md │ ├── @typescript-eslint_no-unnecessary-qualifier.md │ ├── @typescript-eslint_no-unnecessary-template-expression.md │ ├── @typescript-eslint_no-unnecessary-type-arguments.md │ ├── @typescript-eslint_no-unnecessary-type-assertion.md │ ├── @typescript-eslint_no-unnecessary-type-constraint.md │ ├── @typescript-eslint_no-unnecessary-type-parameters.md │ ├── @typescript-eslint_no-unsafe-argument.md │ ├── @typescript-eslint_no-unsafe-assignment.md │ ├── @typescript-eslint_no-unsafe-call.md │ ├── @typescript-eslint_no-unsafe-declaration-merging.md │ ├── @typescript-eslint_no-unsafe-enum-comparison.md │ ├── @typescript-eslint_no-unsafe-function-type.md │ ├── @typescript-eslint_no-unsafe-member-access.md │ ├── @typescript-eslint_no-unsafe-return.md │ ├── @typescript-eslint_no-unsafe-unary-minus.md │ ├── @typescript-eslint_no-unused-expressions.md │ ├── @typescript-eslint_no-unused-vars.md │ ├── @typescript-eslint_no-use-before-define.md │ ├── @typescript-eslint_no-useless-constructor.md │ ├── @typescript-eslint_no-useless-empty-export.md │ ├── @typescript-eslint_no-useless-template-literals.md │ ├── @typescript-eslint_no-var-requires.md │ ├── @typescript-eslint_no-wrapper-object-types.md │ ├── @typescript-eslint_non-nullable-type-assertion-style.md │ ├── @typescript-eslint_object-curly-spacing.md │ ├── @typescript-eslint_only-throw-error.md │ ├── @typescript-eslint_padding-line-between-statements.md │ ├── @typescript-eslint_parameter-properties.md │ ├── @typescript-eslint_prefer-as-const.md │ ├── @typescript-eslint_prefer-destructuring.md │ ├── @typescript-eslint_prefer-enum-initializers.md │ ├── @typescript-eslint_prefer-find.md │ ├── @typescript-eslint_prefer-for-of.md │ ├── @typescript-eslint_prefer-function-type.md │ ├── @typescript-eslint_prefer-includes.md │ ├── @typescript-eslint_prefer-literal-enum-member.md │ ├── @typescript-eslint_prefer-namespace-keyword.md │ ├── @typescript-eslint_prefer-nullish-coalescing.md │ ├── @typescript-eslint_prefer-optional-chain.md │ ├── @typescript-eslint_prefer-promise-reject-errors.md │ ├── @typescript-eslint_prefer-readonly-parameter-types.md │ ├── @typescript-eslint_prefer-readonly.md │ ├── @typescript-eslint_prefer-reduce-type-parameter.md │ ├── @typescript-eslint_prefer-regexp-exec.md │ ├── @typescript-eslint_prefer-return-this-type.md │ ├── @typescript-eslint_prefer-string-starts-ends-with.md │ ├── @typescript-eslint_prefer-ts-expect-error.md │ ├── @typescript-eslint_promise-function-async.md │ ├── @typescript-eslint_quotes.md │ ├── @typescript-eslint_require-array-sort-compare.md │ ├── @typescript-eslint_require-await.md │ ├── @typescript-eslint_restrict-plus-operands.md │ ├── @typescript-eslint_restrict-template-expressions.md │ ├── @typescript-eslint_return-await.md │ ├── @typescript-eslint_semi.md │ ├── @typescript-eslint_sort-type-constituents.md │ ├── @typescript-eslint_space-before-blocks.md │ ├── @typescript-eslint_space-before-function-paren.md │ ├── @typescript-eslint_space-infix-ops.md │ ├── @typescript-eslint_strict-boolean-expressions.md │ ├── @typescript-eslint_switch-exhaustiveness-check.md │ ├── @typescript-eslint_triple-slash-reference.md │ ├── @typescript-eslint_type-annotation-spacing.md │ ├── @typescript-eslint_typedef.md │ ├── @typescript-eslint_unbound-method.md │ ├── @typescript-eslint_unified-signatures.md │ ├── @typescript-eslint_use-unknown-in-catch-callback-variable.md │ ├── accessor-pairs.md │ ├── angular_angularelement.md │ ├── angular_avoid-scope-typos.md │ ├── angular_component-limit.md │ ├── angular_component-name.md │ ├── angular_constant-name.md │ ├── angular_controller-as-route.md │ ├── angular_controller-as-vm.md │ ├── angular_controller-as.md │ ├── angular_controller-name.md │ ├── angular_deferred.md │ ├── angular_definedundefined.md │ ├── angular_di-order.md │ ├── angular_di-unused.md │ ├── angular_di.md │ ├── angular_directive-name.md │ ├── angular_directive-restrict.md │ ├── angular_document-service.md │ ├── angular_dumb-inject.md │ ├── angular_empty-controller.md │ ├── angular_factory-name.md │ ├── angular_file-name.md │ ├── angular_filter-name.md │ ├── angular_foreach.md │ ├── angular_function-type.md │ ├── angular_interval-service.md │ ├── angular_json-functions.md │ ├── angular_log.md │ ├── angular_module-dependency-order.md │ ├── angular_module-getter.md │ ├── angular_module-name.md │ ├── angular_module-setter.md │ ├── angular_no-angular-mock.md │ ├── angular_no-controller.md │ ├── angular_no-cookiestore.md │ ├── angular_no-directive-replace.md │ ├── angular_no-http-callback.md │ ├── angular_no-inline-template.md │ ├── angular_no-jquery-angularelement.md │ ├── angular_no-private-call.md │ ├── angular_no-run-logic.md │ ├── angular_no-service-method.md │ ├── angular_no-services.md │ ├── angular_on-destroy.md │ ├── angular_on-watch.md │ ├── angular_one-dependency-per-line.md │ ├── angular_prefer-component.md │ ├── angular_provider-name.md │ ├── angular_rest-service.md │ ├── angular_timeout-service.md │ ├── angular_typecheck-array.md │ ├── angular_typecheck-date.md │ ├── angular_typecheck-function.md │ ├── angular_typecheck-number.md │ ├── angular_typecheck-object.md │ ├── angular_typecheck-string.md │ ├── angular_value-name.md │ ├── angular_watchers-execution.md │ ├── angular_window-service.md │ ├── array-bracket-newline.md │ ├── array-bracket-spacing.md │ ├── array-callback-return.md │ ├── array-element-newline.md │ ├── arrow-body-style.md │ ├── arrow-spacing.md │ ├── ava_assertion-arguments.md │ ├── ava_hooks-order.md │ ├── ava_max-asserts.md │ ├── ava_no-async-fn-without-await.md │ ├── ava_no-duplicate-modifiers.md │ ├── ava_no-identical-title.md │ ├── ava_no-ignored-test-files.md │ ├── ava_no-import-test-files.md │ ├── ava_no-incorrect-deep-equal.md │ ├── ava_no-inline-assertions.md │ ├── ava_no-nested-tests.md │ ├── ava_no-only-test.md │ ├── ava_no-skip-assert.md │ ├── ava_no-skip-test.md │ ├── ava_no-todo-implementation.md │ ├── ava_no-todo-test.md │ ├── ava_no-unknown-modifiers.md │ ├── ava_prefer-async-await.md │ ├── ava_prefer-power-assert.md │ ├── ava_prefer-t-regex.md │ ├── ava_test-title-format.md │ ├── ava_test-title.md │ ├── ava_use-t-throws-async-well.md │ ├── ava_use-t-well.md │ ├── ava_use-t.md │ ├── ava_use-test.md │ ├── ava_use-true-false.md │ ├── backbone_collection-model.md │ ├── backbone_defaults-on-top.md │ ├── backbone_event-scope.md │ ├── backbone_events-on-top.md │ ├── backbone_initialize-on-top.md │ ├── backbone_model-defaults.md │ ├── backbone_no-changed-set.md │ ├── backbone_no-collection-models.md │ ├── backbone_no-constructor.md │ ├── backbone_no-el-assign.md │ ├── backbone_no-model-attributes.md │ ├── backbone_no-native-jquery.md │ ├── backbone_no-silent.md │ ├── backbone_no-view-collection-models.md │ ├── backbone_no-view-model-attributes.md │ ├── backbone_no-view-onoff-binding.md │ ├── backbone_no-view-qualified-jquery.md │ ├── backbone_render-return.md │ ├── block-scoped-var.md │ ├── block-spacing.md │ ├── callback-return.md │ ├── camelcase.md │ ├── capitalized-comments.md │ ├── class-methods-use-this.md │ ├── comma-dangle.md │ ├── comma-spacing.md │ ├── comma-style.md │ ├── compat_compat.md │ ├── complexity.md │ ├── consistent-return.md │ ├── consistent-this.md │ ├── constructor-super.md │ ├── curly.md │ ├── cypress_assertion-before-screenshot.md │ ├── cypress_no-assigning-return-values.md │ ├── cypress_no-async-before.md │ ├── cypress_no-async-tests.md │ ├── cypress_no-debug.md │ ├── cypress_no-force.md │ ├── cypress_no-pause.md │ ├── cypress_no-unnecessary-waiting.md │ ├── cypress_require-data-selectors.md │ ├── cypress_unsafe-to-chain-command.md │ ├── default-case-last.md │ ├── default-case.md │ ├── default-param-last.md │ ├── description.json │ ├── dot-location.md │ ├── dot-notation.md │ ├── ember-suave_lines-between-object-properties.md │ ├── ember-suave_no-const-outside-module-scope.md │ ├── ember-suave_no-direct-property-access.md │ ├── ember-suave_require-access-in-comments.md │ ├── ember_alias-model-in-controller.md │ ├── ember_avoid-leaking-state-in-ember-objects.md │ ├── ember_avoid-using-needs-in-controllers.md │ ├── ember_classic-decorator-hooks.md │ ├── ember_classic-decorator-no-classic-methods.md │ ├── ember_closure-actions.md │ ├── ember_computed-property-getters.md │ ├── ember_jquery-ember-run.md │ ├── ember_named-functions-in-promises.md │ ├── ember_new-module-imports.md │ ├── ember_no-actions-hash.md │ ├── ember_no-array-prototype-extensions.md │ ├── ember_no-arrow-function-computed-properties.md │ ├── ember_no-assignment-of-untracked-properties-used-in-tracking-contexts.md │ ├── ember_no-at-ember-render-modifiers.md │ ├── ember_no-attrs-in-components.md │ ├── ember_no-attrs-snapshot.md │ ├── ember_no-capital-letters-in-routes.md │ ├── ember_no-classic-classes.md │ ├── ember_no-classic-components.md │ ├── ember_no-component-lifecycle-hooks.md │ ├── ember_no-computed-properties-in-native-classes.md │ ├── ember_no-controller-access-in-routes.md │ ├── ember_no-controllers.md │ ├── ember_no-current-route-name.md │ ├── ember_no-deeply-nested-dependent-keys-with-each.md │ ├── ember_no-deprecated-router-transition-methods.md │ ├── ember_no-duplicate-dependent-keys.md │ ├── ember_no-ember-super-in-es-classes.md │ ├── ember_no-ember-testing-in-module-scope.md │ ├── ember_no-empty-attrs.md │ ├── ember_no-empty-glimmer-component-classes.md │ ├── ember_no-function-prototype-extensions.md │ ├── ember_no-get-with-default.md │ ├── ember_no-get.md │ ├── ember_no-global-jquery.md │ ├── ember_no-html-safe.md │ ├── ember_no-implicit-injections.md │ ├── ember_no-implicit-service-injection-argument.md │ ├── ember_no-incorrect-calls-with-inline-anonymous-functions.md │ ├── ember_no-incorrect-computed-macros.md │ ├── ember_no-invalid-debug-function-arguments.md │ ├── ember_no-invalid-dependent-keys.md │ ├── ember_no-invalid-test-waiters.md │ ├── ember_no-jquery.md │ ├── ember_no-legacy-test-waiters.md │ ├── ember_no-mixins.md │ ├── ember_no-new-mixins.md │ ├── ember_no-noop-setup-on-error-in-before.md │ ├── ember_no-observers.md │ ├── ember_no-old-shims.md │ ├── ember_no-on-calls-in-components.md │ ├── ember_no-pause-test.md │ ├── ember_no-private-routing-service.md │ ├── ember_no-proxies.md │ ├── ember_no-replace-test-comments.md │ ├── ember_no-restricted-resolver-tests.md │ ├── ember_no-restricted-service-injections.md │ ├── ember_no-runloop.md │ ├── ember_no-settled-after-test-helper.md │ ├── ember_no-shadow-route-definition.md │ ├── ember_no-side-effects.md │ ├── ember_no-string-prototype-extensions.md │ ├── ember_no-test-and-then.md │ ├── ember_no-test-import-export.md │ ├── ember_no-test-module-for.md │ ├── ember_no-test-support-import.md │ ├── ember_no-test-this-render.md │ ├── ember_no-tracked-properties-from-args.md │ ├── ember_no-try-invoke.md │ ├── ember_no-unnecessary-index-route.md │ ├── ember_no-unnecessary-route-path-option.md │ ├── ember_no-unnecessary-service-injection-argument.md │ ├── ember_no-unused-services.md │ ├── ember_no-volatile-computed-properties.md │ ├── ember_order-in-components.md │ ├── ember_order-in-controllers.md │ ├── ember_order-in-models.md │ ├── ember_order-in-routes.md │ ├── ember_prefer-ember-test-helpers.md │ ├── ember_require-computed-macros.md │ ├── ember_require-computed-property-dependencies.md │ ├── ember_require-fetch-import.md │ ├── ember_require-return-from-computed.md │ ├── ember_require-super-in-lifecycle-hooks.md │ ├── ember_require-tagless-components.md │ ├── ember_require-valid-css-selector-in-test-helpers.md │ ├── ember_route-path-style.md │ ├── ember_routes-segments-snake-case.md │ ├── ember_template-no-let-reference.md │ ├── ember_use-brace-expansion.md │ ├── ember_use-ember-data-rfc-395-imports.md │ ├── ember_use-ember-get-and-set.md │ ├── eol-last.md │ ├── eqeqeq.md │ ├── es-x_no-accessor-properties.md │ ├── es-x_no-arbitrary-module-namespace-names.md │ ├── es-x_no-array-from.md │ ├── es-x_no-array-isarray.md │ ├── es-x_no-array-of.md │ ├── es-x_no-array-prototype-copywithin.md │ ├── es-x_no-array-prototype-entries.md │ ├── es-x_no-array-prototype-every.md │ ├── es-x_no-array-prototype-fill.md │ ├── es-x_no-array-prototype-filter.md │ ├── es-x_no-array-prototype-find.md │ ├── es-x_no-array-prototype-findindex.md │ ├── es-x_no-array-prototype-findlast-findlastindex.md │ ├── es-x_no-array-prototype-flat.md │ ├── es-x_no-array-prototype-foreach.md │ ├── es-x_no-array-prototype-includes.md │ ├── es-x_no-array-prototype-indexof.md │ ├── es-x_no-array-prototype-keys.md │ ├── es-x_no-array-prototype-lastindexof.md │ ├── es-x_no-array-prototype-map.md │ ├── es-x_no-array-prototype-reduce.md │ ├── es-x_no-array-prototype-reduceright.md │ ├── es-x_no-array-prototype-some.md │ ├── es-x_no-array-prototype-toreversed.md │ ├── es-x_no-array-prototype-tosorted.md │ ├── es-x_no-array-prototype-tospliced.md │ ├── es-x_no-array-prototype-values.md │ ├── es-x_no-array-prototype-with.md │ ├── es-x_no-array-string-prototype-at.md │ ├── es-x_no-arraybuffer-prototype-transfer.md │ ├── es-x_no-arrow-functions.md │ ├── es-x_no-async-functions.md │ ├── es-x_no-async-iteration.md │ ├── es-x_no-atomics-waitasync.md │ ├── es-x_no-atomics.md │ ├── es-x_no-bigint.md │ ├── es-x_no-binary-numeric-literals.md │ ├── es-x_no-block-scoped-functions.md │ ├── es-x_no-block-scoped-variables.md │ ├── es-x_no-class-fields.md │ ├── es-x_no-class-static-block.md │ ├── es-x_no-classes.md │ ├── es-x_no-computed-properties.md │ ├── es-x_no-date-now.md │ ├── es-x_no-date-prototype-getyear-setyear.md │ ├── es-x_no-date-prototype-togmtstring.md │ ├── es-x_no-default-parameters.md │ ├── es-x_no-destructuring.md │ ├── es-x_no-dynamic-import.md │ ├── es-x_no-error-cause.md │ ├── es-x_no-escape-unescape.md │ ├── es-x_no-exponential-operators.md │ ├── es-x_no-export-ns-from.md │ ├── es-x_no-for-of-loops.md │ ├── es-x_no-function-declarations-in-if-statement-clauses-without-block.md │ ├── es-x_no-function-prototype-bind.md │ ├── es-x_no-generators.md │ ├── es-x_no-global-this.md │ ├── es-x_no-hashbang.md │ ├── es-x_no-import-meta.md │ ├── es-x_no-initializers-in-for-in.md │ ├── es-x_no-intl-datetimeformat-prototype-formatrange.md │ ├── es-x_no-intl-datetimeformat-prototype-formattoparts.md │ ├── es-x_no-intl-displaynames.md │ ├── es-x_no-intl-getcanonicallocales.md │ ├── es-x_no-intl-listformat.md │ ├── es-x_no-intl-locale.md │ ├── es-x_no-intl-numberformat-prototype-formatrange.md │ ├── es-x_no-intl-numberformat-prototype-formatrangetoparts.md │ ├── es-x_no-intl-numberformat-prototype-formattoparts.md │ ├── es-x_no-intl-pluralrules-prototype-selectrange.md │ ├── es-x_no-intl-pluralrules.md │ ├── es-x_no-intl-relativetimeformat.md │ ├── es-x_no-intl-segmenter.md │ ├── es-x_no-intl-supportedvaluesof.md │ ├── es-x_no-json-superset.md │ ├── es-x_no-json.md │ ├── es-x_no-keyword-properties.md │ ├── es-x_no-labelled-function-declarations.md │ ├── es-x_no-legacy-object-prototype-accessor-methods.md │ ├── es-x_no-logical-assignment-operators.md │ ├── es-x_no-malformed-template-literals.md │ ├── es-x_no-map.md │ ├── es-x_no-math-acosh.md │ ├── es-x_no-math-asinh.md │ ├── es-x_no-math-atanh.md │ ├── es-x_no-math-cbrt.md │ ├── es-x_no-math-clz32.md │ ├── es-x_no-math-cosh.md │ ├── es-x_no-math-expm1.md │ ├── es-x_no-math-fround.md │ ├── es-x_no-math-hypot.md │ ├── es-x_no-math-imul.md │ ├── es-x_no-math-log10.md │ ├── es-x_no-math-log1p.md │ ├── es-x_no-math-log2.md │ ├── es-x_no-math-sign.md │ ├── es-x_no-math-sinh.md │ ├── es-x_no-math-tanh.md │ ├── es-x_no-math-trunc.md │ ├── es-x_no-modules.md │ ├── es-x_no-new-target.md │ ├── es-x_no-nullish-coalescing-operators.md │ ├── es-x_no-number-epsilon.md │ ├── es-x_no-number-isfinite.md │ ├── es-x_no-number-isinteger.md │ ├── es-x_no-number-isnan.md │ ├── es-x_no-number-issafeinteger.md │ ├── es-x_no-number-maxsafeinteger.md │ ├── es-x_no-number-minsafeinteger.md │ ├── es-x_no-number-parsefloat.md │ ├── es-x_no-number-parseint.md │ ├── es-x_no-numeric-separators.md │ ├── es-x_no-object-assign.md │ ├── es-x_no-object-create.md │ ├── es-x_no-object-defineproperties.md │ ├── es-x_no-object-defineproperty.md │ ├── es-x_no-object-entries.md │ ├── es-x_no-object-freeze.md │ ├── es-x_no-object-fromentries.md │ ├── es-x_no-object-getownpropertydescriptor.md │ ├── es-x_no-object-getownpropertydescriptors.md │ ├── es-x_no-object-getownpropertynames.md │ ├── es-x_no-object-getownpropertysymbols.md │ ├── es-x_no-object-getprototypeof.md │ ├── es-x_no-object-hasown.md │ ├── es-x_no-object-is.md │ ├── es-x_no-object-isextensible.md │ ├── es-x_no-object-isfrozen.md │ ├── es-x_no-object-issealed.md │ ├── es-x_no-object-keys.md │ ├── es-x_no-object-map-groupby.md │ ├── es-x_no-object-preventextensions.md │ ├── es-x_no-object-seal.md │ ├── es-x_no-object-setprototypeof.md │ ├── es-x_no-object-super-properties.md │ ├── es-x_no-object-values.md │ ├── es-x_no-octal-numeric-literals.md │ ├── es-x_no-optional-catch-binding.md │ ├── es-x_no-optional-chaining.md │ ├── es-x_no-private-in.md │ ├── es-x_no-promise-all-settled.md │ ├── es-x_no-promise-any.md │ ├── es-x_no-promise-prototype-finally.md │ ├── es-x_no-promise-withresolvers.md │ ├── es-x_no-promise.md │ ├── es-x_no-property-shorthands.md │ ├── es-x_no-proxy.md │ ├── es-x_no-reflect.md │ ├── es-x_no-regexp-d-flag.md │ ├── es-x_no-regexp-duplicate-named-capturing-groups.md │ ├── es-x_no-regexp-lookbehind-assertions.md │ ├── es-x_no-regexp-named-capture-groups.md │ ├── es-x_no-regexp-prototype-compile.md │ ├── es-x_no-regexp-prototype-flags.md │ ├── es-x_no-regexp-s-flag.md │ ├── es-x_no-regexp-u-flag.md │ ├── es-x_no-regexp-unicode-property-escapes-2019.md │ ├── es-x_no-regexp-unicode-property-escapes-2020.md │ ├── es-x_no-regexp-unicode-property-escapes-2021.md │ ├── es-x_no-regexp-unicode-property-escapes-2022.md │ ├── es-x_no-regexp-unicode-property-escapes-2023.md │ ├── es-x_no-regexp-unicode-property-escapes.md │ ├── es-x_no-regexp-v-flag.md │ ├── es-x_no-regexp-y-flag.md │ ├── es-x_no-resizable-and-growable-arraybuffers.md │ ├── es-x_no-rest-parameters.md │ ├── es-x_no-rest-spread-properties.md │ ├── es-x_no-set-prototype-difference.md │ ├── es-x_no-set-prototype-intersection.md │ ├── es-x_no-set-prototype-isdisjointfrom.md │ ├── es-x_no-set-prototype-issubsetof.md │ ├── es-x_no-set-prototype-issupersetof.md │ ├── es-x_no-set-prototype-symmetricdifference.md │ ├── es-x_no-set-prototype-union.md │ ├── es-x_no-set.md │ ├── es-x_no-shadow-catch-param.md │ ├── es-x_no-shared-array-buffer.md │ ├── es-x_no-spread-elements.md │ ├── es-x_no-string-create-html-methods.md │ ├── es-x_no-string-fromcodepoint.md │ ├── es-x_no-string-prototype-codepointat.md │ ├── es-x_no-string-prototype-endswith.md │ ├── es-x_no-string-prototype-includes.md │ ├── es-x_no-string-prototype-iswellformed-towellformed.md │ ├── es-x_no-string-prototype-matchall.md │ ├── es-x_no-string-prototype-normalize.md │ ├── es-x_no-string-prototype-padstart-padend.md │ ├── es-x_no-string-prototype-repeat.md │ ├── es-x_no-string-prototype-replaceall.md │ ├── es-x_no-string-prototype-startswith.md │ ├── es-x_no-string-prototype-substr.md │ ├── es-x_no-string-prototype-trim.md │ ├── es-x_no-string-prototype-trimleft-trimright.md │ ├── es-x_no-string-prototype-trimstart-trimend.md │ ├── es-x_no-string-raw.md │ ├── es-x_no-subclassing-builtins.md │ ├── es-x_no-symbol-prototype-description.md │ ├── es-x_no-symbol.md │ ├── es-x_no-template-literals.md │ ├── es-x_no-top-level-await.md │ ├── es-x_no-trailing-commas.md │ ├── es-x_no-trailing-function-commas.md │ ├── es-x_no-typed-arrays.md │ ├── es-x_no-unicode-codepoint-escapes.md │ ├── es-x_no-weak-map.md │ ├── es-x_no-weak-set.md │ ├── es-x_no-weakrefs.md │ ├── eslint-plugin_consistent-output.md │ ├── eslint-plugin_fixer-return.md │ ├── eslint-plugin_meta-property-ordering.md │ ├── eslint-plugin_no-deprecated-context-methods.md │ ├── eslint-plugin_no-deprecated-report-api.md │ ├── eslint-plugin_no-identical-tests.md │ ├── eslint-plugin_no-missing-message-ids.md │ ├── eslint-plugin_no-missing-placeholders.md │ ├── eslint-plugin_no-only-tests.md │ ├── eslint-plugin_no-property-in-node.md │ ├── eslint-plugin_no-unused-message-ids.md │ ├── eslint-plugin_no-unused-placeholders.md │ ├── eslint-plugin_no-useless-token-range.md │ ├── eslint-plugin_prefer-message-ids.md │ ├── eslint-plugin_prefer-object-rule.md │ ├── eslint-plugin_prefer-output-null.md │ ├── eslint-plugin_prefer-placeholders.md │ ├── eslint-plugin_prefer-replace-text.md │ ├── eslint-plugin_report-message-format.md │ ├── eslint-plugin_require-meta-docs-description.md │ ├── eslint-plugin_require-meta-docs-recommended.md │ ├── eslint-plugin_require-meta-docs-url.md │ ├── eslint-plugin_require-meta-fixable.md │ ├── eslint-plugin_require-meta-has-suggestions.md │ ├── eslint-plugin_require-meta-schema.md │ ├── eslint-plugin_require-meta-type.md │ ├── eslint-plugin_test-case-property-ordering.md │ ├── eslint-plugin_test-case-shorthand-strings.md │ ├── flowtype_array-style-complex-type.md │ ├── flowtype_array-style-simple-type.md │ ├── flowtype_arrow-parens.md │ ├── flowtype_boolean-style.md │ ├── flowtype_define-flow-type.md │ ├── flowtype_delimiter-dangle.md │ ├── flowtype_enforce-line-break.md │ ├── flowtype_generic-spacing.md │ ├── flowtype_interface-id-match.md │ ├── flowtype_newline-after-flow-annotation.md │ ├── flowtype_no-dupe-keys.md │ ├── flowtype_no-duplicate-type-union-intersection-members.md │ ├── flowtype_no-existential-type.md │ ├── flowtype_no-flow-fix-me-comments.md │ ├── flowtype_no-internal-flow-type.md │ ├── flowtype_no-mixed.md │ ├── flowtype_no-mutable-array.md │ ├── flowtype_no-primitive-constructor-types.md │ ├── flowtype_no-types-missing-file-annotation.md │ ├── flowtype_no-unused-expressions.md │ ├── flowtype_no-weak-types.md │ ├── flowtype_object-type-curly-spacing.md │ ├── flowtype_object-type-delimiter.md │ ├── flowtype_quotes.md │ ├── flowtype_require-compound-type-alias.md │ ├── flowtype_require-exact-type.md │ ├── flowtype_require-indexer-name.md │ ├── flowtype_require-inexact-type.md │ ├── flowtype_require-parameter-type.md │ ├── flowtype_require-readonly-react-props.md │ ├── flowtype_require-return-type.md │ ├── flowtype_require-types-at-top.md │ ├── flowtype_require-valid-file-annotation.md │ ├── flowtype_require-variable-type.md │ ├── flowtype_semi.md │ ├── flowtype_sort-keys.md │ ├── flowtype_sort-type-union-intersection-members.md │ ├── flowtype_space-after-type-colon.md │ ├── flowtype_space-before-generic-bracket.md │ ├── flowtype_space-before-type-colon.md │ ├── flowtype_spread-exact-type.md │ ├── flowtype_type-id-match.md │ ├── flowtype_type-import-style.md │ ├── flowtype_union-intersection-spacing.md │ ├── flowtype_use-flow-type.md │ ├── flowtype_use-read-only-spread.md │ ├── flowtype_valid-syntax.md │ ├── for-direction.md │ ├── fp_no-arguments.md │ ├── fp_no-class.md │ ├── fp_no-delete.md │ ├── fp_no-events.md │ ├── fp_no-get-set.md │ ├── fp_no-let.md │ ├── fp_no-loops.md │ ├── fp_no-mutating-assign.md │ ├── fp_no-mutating-methods.md │ ├── fp_no-mutation.md │ ├── fp_no-nil.md │ ├── fp_no-proxy.md │ ├── fp_no-rest-parameters.md │ ├── fp_no-this.md │ ├── fp_no-throw.md │ ├── fp_no-unused-expression.md │ ├── fp_no-valueof-field.md │ ├── func-call-spacing.md │ ├── func-name-matching.md │ ├── func-names.md │ ├── func-style.md │ ├── function-call-argument-newline.md │ ├── function-paren-newline.md │ ├── functional_no-classes.md │ ├── functional_no-loop-statements.md │ ├── functional_no-promise-reject.md │ ├── functional_no-this-expressions.md │ ├── functional_prefer-property-signatures.md │ ├── functional_prefer-readonly-type.md │ ├── functional_prefer-tacit.md │ ├── functional_readonly-type.md │ ├── generator-star-spacing.md │ ├── getter-return.md │ ├── global-require.md │ ├── grouped-accessor-pairs.md │ ├── guard-for-in.md │ ├── handle-callback-err.md │ ├── i18next_no-literal-string.md │ ├── id-blacklist.md │ ├── id-denylist.md │ ├── id-length.md │ ├── id-match.md │ ├── implicit-arrow-linebreak.md │ ├── import_consistent-type-specifier-style.md │ ├── import_default.md │ ├── import_dynamic-import-chunkname.md │ ├── import_export.md │ ├── import_exports-last.md │ ├── import_extensions.md │ ├── import_first.md │ ├── import_group-exports.md │ ├── import_imports-first.md │ ├── import_max-dependencies.md │ ├── import_named.md │ ├── import_namespace.md │ ├── import_newline-after-import.md │ ├── import_no-absolute-path.md │ ├── import_no-amd.md │ ├── import_no-anonymous-default-export.md │ ├── import_no-commonjs.md │ ├── import_no-cycle.md │ ├── import_no-default-export.md │ ├── import_no-deprecated.md │ ├── import_no-duplicates.md │ ├── import_no-dynamic-require.md │ ├── import_no-empty-named-blocks.md │ ├── import_no-extraneous-dependencies.md │ ├── import_no-import-module-exports.md │ ├── import_no-internal-modules.md │ ├── import_no-mutable-exports.md │ ├── import_no-named-as-default-member.md │ ├── import_no-named-as-default.md │ ├── import_no-named-default.md │ ├── import_no-named-export.md │ ├── import_no-namespace.md │ ├── import_no-nodejs-modules.md │ ├── import_no-relative-packages.md │ ├── import_no-relative-parent-imports.md │ ├── import_no-restricted-paths.md │ ├── import_no-self-import.md │ ├── import_no-unassigned-import.md │ ├── import_no-unresolved.md │ ├── import_no-unused-modules.md │ ├── import_no-useless-path-segments.md │ ├── import_no-webpack-loader-syntax.md │ ├── import_order.md │ ├── import_prefer-default-export.md │ ├── import_unambiguous.md │ ├── indent-legacy.md │ ├── init-declarations.md │ ├── jasmine_expect-matcher.md │ ├── jasmine_expect-single-argument.md │ ├── jasmine_missing-expect.md │ ├── jasmine_named-spy.md │ ├── jasmine_new-line-before-expect.md │ ├── jasmine_new-line-between-declarations.md │ ├── jasmine_no-assign-spyon.md │ ├── jasmine_no-describe-variables.md │ ├── jasmine_no-disabled-tests.md │ ├── jasmine_no-expect-in-setup-teardown.md │ ├── jasmine_no-focused-tests.md │ ├── jasmine_no-global-setup.md │ ├── jasmine_no-pending-tests.md │ ├── jasmine_no-promise-without-done-fail.md │ ├── jasmine_no-spec-dupes.md │ ├── jasmine_no-suite-callback-args.md │ ├── jasmine_no-suite-dupes.md │ ├── jasmine_no-unsafe-spy.md │ ├── jasmine_prefer-jasmine-matcher.md │ ├── jasmine_prefer-promise-strategies.md │ ├── jasmine_prefer-toBeUndefined.md │ ├── jasmine_prefer-toHaveBeenCalledWith.md │ ├── jasmine_valid-expect.md │ ├── jest-dom_prefer-checked.md │ ├── jest-dom_prefer-empty.md │ ├── jest-dom_prefer-enabled-disabled.md │ ├── jest-dom_prefer-focus.md │ ├── jest-dom_prefer-in-document.md │ ├── jest-dom_prefer-required.md │ ├── jest-dom_prefer-to-have-attribute.md │ ├── jest-dom_prefer-to-have-class.md │ ├── jest-dom_prefer-to-have-style.md │ ├── jest-dom_prefer-to-have-text-content.md │ ├── jest-dom_prefer-to-have-value.md │ ├── jest-extended_prefer-to-be-array.md │ ├── jest-extended_prefer-to-be-false.md │ ├── jest-extended_prefer-to-be-object.md │ ├── jest-extended_prefer-to-be-true.md │ ├── jest-extended_prefer-to-have-been-called-once.md │ ├── jest-formatting_padding-around-after-all-blocks.md │ ├── jest-formatting_padding-around-after-each-blocks.md │ ├── jest-formatting_padding-around-all.md │ ├── jest-formatting_padding-around-before-all-blocks.md │ ├── jest-formatting_padding-around-before-each-blocks.md │ ├── jest-formatting_padding-around-describe-blocks.md │ ├── jest-formatting_padding-around-expect-groups.md │ ├── jest-formatting_padding-around-test-blocks.md │ ├── jest_consistent-test-it.md │ ├── jest_expect-expect.md │ ├── jest_max-expects.md │ ├── jest_max-nested-describe.md │ ├── jest_no-alias-methods.md │ ├── jest_no-commented-out-tests.md │ ├── jest_no-conditional-expect.md │ ├── jest_no-conditional-in-test.md │ ├── jest_no-confusing-set-timeout.md │ ├── jest_no-deprecated-functions.md │ ├── jest_no-disabled-tests.md │ ├── jest_no-done-callback.md │ ├── jest_no-duplicate-hooks.md │ ├── jest_no-export.md │ ├── jest_no-focused-tests.md │ ├── jest_no-hooks.md │ ├── jest_no-identical-title.md │ ├── jest_no-interpolation-in-snapshots.md │ ├── jest_no-jasmine-globals.md │ ├── jest_no-large-snapshots.md │ ├── jest_no-mocks-import.md │ ├── jest_no-restricted-jest-methods.md │ ├── jest_no-restricted-matchers.md │ ├── jest_no-standalone-expect.md │ ├── jest_no-test-prefixes.md │ ├── jest_no-test-return-statement.md │ ├── jest_no-untyped-mock-factory.md │ ├── jest_padding-around-after-all-blocks.md │ ├── jest_padding-around-after-each-blocks.md │ ├── jest_padding-around-all.md │ ├── jest_padding-around-before-all-blocks.md │ ├── jest_padding-around-before-each-blocks.md │ ├── jest_padding-around-describe-blocks.md │ ├── jest_padding-around-expect-groups.md │ ├── jest_padding-around-test-blocks.md │ ├── jest_prefer-called-with.md │ ├── jest_prefer-comparison-matcher.md │ ├── jest_prefer-each.md │ ├── jest_prefer-equality-matcher.md │ ├── jest_prefer-expect-assertions.md │ ├── jest_prefer-expect-resolves.md │ ├── jest_prefer-hooks-in-order.md │ ├── jest_prefer-hooks-on-top.md │ ├── jest_prefer-importing-jest-globals.md │ ├── jest_prefer-jest-mocked.md │ ├── jest_prefer-lowercase-title.md │ ├── jest_prefer-mock-promise-shorthand.md │ ├── jest_prefer-snapshot-hint.md │ ├── jest_prefer-spy-on.md │ ├── jest_prefer-strict-equal.md │ ├── jest_prefer-to-be.md │ ├── jest_prefer-to-contain.md │ ├── jest_prefer-to-have-length.md │ ├── jest_prefer-todo.md │ ├── jest_require-hook.md │ ├── jest_require-to-throw-message.md │ ├── jest_require-top-level-describe.md │ ├── jest_unbound-method.md │ ├── jest_valid-describe-callback.md │ ├── jest_valid-expect-in-promise.md │ ├── jest_valid-expect.md │ ├── jest_valid-title.md │ ├── jsdoc_check-access.md │ ├── jsdoc_check-alignment.md │ ├── jsdoc_check-examples.md │ ├── jsdoc_check-indentation.md │ ├── jsdoc_check-line-alignment.md │ ├── jsdoc_check-param-names.md │ ├── jsdoc_check-property-names.md │ ├── jsdoc_check-syntax.md │ ├── jsdoc_check-tag-names.md │ ├── jsdoc_check-template-names.md │ ├── jsdoc_check-types.md │ ├── jsdoc_check-values.md │ ├── jsdoc_convert-to-jsdoc-comments.md │ ├── jsdoc_empty-tags.md │ ├── jsdoc_implements-on-classes.md │ ├── jsdoc_imports-as-dependencies.md │ ├── jsdoc_informative-docs.md │ ├── jsdoc_match-description.md │ ├── jsdoc_match-name.md │ ├── jsdoc_multiline-blocks.md │ ├── jsdoc_no-bad-blocks.md │ ├── jsdoc_no-blank-block-descriptions.md │ ├── jsdoc_no-blank-blocks.md │ ├── jsdoc_no-defaults.md │ ├── jsdoc_no-missing-syntax.md │ ├── jsdoc_no-multi-asterisks.md │ ├── jsdoc_no-restricted-syntax.md │ ├── jsdoc_no-types.md │ ├── jsdoc_no-undefined-types.md │ ├── jsdoc_require-asterisk-prefix.md │ ├── jsdoc_require-description-complete-sentence.md │ ├── jsdoc_require-description.md │ ├── jsdoc_require-example.md │ ├── jsdoc_require-file-overview.md │ ├── jsdoc_require-hyphen-before-param-description.md │ ├── jsdoc_require-jsdoc.md │ ├── jsdoc_require-param-description.md │ ├── jsdoc_require-param-name.md │ ├── jsdoc_require-param-type.md │ ├── jsdoc_require-param.md │ ├── jsdoc_require-property-description.md │ ├── jsdoc_require-property-name.md │ ├── jsdoc_require-property-type.md │ ├── jsdoc_require-property.md │ ├── jsdoc_require-returns-check.md │ ├── jsdoc_require-returns-description.md │ ├── jsdoc_require-returns-type.md │ ├── jsdoc_require-returns.md │ ├── jsdoc_require-template.md │ ├── jsdoc_require-throws.md │ ├── jsdoc_require-yields-check.md │ ├── jsdoc_require-yields.md │ ├── jsdoc_sort-tags.md │ ├── jsdoc_tag-lines.md │ ├── jsdoc_text-escaping.md │ ├── jsdoc_valid-types.md │ ├── jsonc_array-bracket-newline.md │ ├── jsonc_array-bracket-spacing.md │ ├── jsonc_array-element-newline.md │ ├── jsonc_auto.md │ ├── jsonc_comma-dangle.md │ ├── jsonc_comma-style.md │ ├── jsonc_indent.md │ ├── jsonc_key-name-casing.md │ ├── jsonc_key-spacing.md │ ├── jsonc_no-bigint-literals.md │ ├── jsonc_no-binary-expression.md │ ├── jsonc_no-binary-numeric-literals.md │ ├── jsonc_no-comments.md │ ├── jsonc_no-dupe-keys.md │ ├── jsonc_no-escape-sequence-in-identifier.md │ ├── jsonc_no-floating-decimal.md │ ├── jsonc_no-hexadecimal-numeric-literals.md │ ├── jsonc_no-infinity.md │ ├── jsonc_no-irregular-whitespace.md │ ├── jsonc_no-multi-str.md │ ├── jsonc_no-nan.md │ ├── jsonc_no-number-props.md │ ├── jsonc_no-numeric-separators.md │ ├── jsonc_no-octal-escape.md │ ├── jsonc_no-octal-numeric-literals.md │ ├── jsonc_no-octal.md │ ├── jsonc_no-parenthesized.md │ ├── jsonc_no-plus-sign.md │ ├── jsonc_no-regexp-literals.md │ ├── jsonc_no-sparse-arrays.md │ ├── jsonc_no-template-literals.md │ ├── jsonc_no-undefined-value.md │ ├── jsonc_no-unicode-codepoint-escapes.md │ ├── jsonc_no-useless-escape.md │ ├── jsonc_object-curly-newline.md │ ├── jsonc_object-curly-spacing.md │ ├── jsonc_object-property-newline.md │ ├── jsonc_quote-props.md │ ├── jsonc_quotes.md │ ├── jsonc_sort-array-values.md │ ├── jsonc_sort-keys.md │ ├── jsonc_space-unary-ops.md │ ├── jsonc_valid-json-number.md │ ├── jsonc_vue-custom-block_no-parsing-error.md │ ├── jsx-a11y_accessible-emoji.md │ ├── jsx-a11y_alt-text.md │ ├── jsx-a11y_anchor-ambiguous-text.md │ ├── jsx-a11y_anchor-has-content.md │ ├── jsx-a11y_anchor-is-valid.md │ ├── jsx-a11y_aria-activedescendant-has-tabindex.md │ ├── jsx-a11y_aria-props.md │ ├── jsx-a11y_aria-proptypes.md │ ├── jsx-a11y_aria-role.md │ ├── jsx-a11y_aria-unsupported-elements.md │ ├── jsx-a11y_autocomplete-valid.md │ ├── jsx-a11y_click-events-have-key-events.md │ ├── jsx-a11y_control-has-associated-label.md │ ├── jsx-a11y_heading-has-content.md │ ├── jsx-a11y_html-has-lang.md │ ├── jsx-a11y_iframe-has-title.md │ ├── jsx-a11y_img-redundant-alt.md │ ├── jsx-a11y_interactive-supports-focus.md │ ├── jsx-a11y_label-has-associated-control.md │ ├── jsx-a11y_label-has-for.md │ ├── jsx-a11y_lang.md │ ├── jsx-a11y_media-has-caption.md │ ├── jsx-a11y_mouse-events-have-key-events.md │ ├── jsx-a11y_no-access-key.md │ ├── jsx-a11y_no-aria-hidden-on-focusable.md │ ├── jsx-a11y_no-autofocus.md │ ├── jsx-a11y_no-distracting-elements.md │ ├── jsx-a11y_no-interactive-element-to-noninteractive-role.md │ ├── jsx-a11y_no-noninteractive-element-interactions.md │ ├── jsx-a11y_no-noninteractive-element-to-interactive-role.md │ ├── jsx-a11y_no-noninteractive-tabindex.md │ ├── jsx-a11y_no-onchange.md │ ├── jsx-a11y_no-redundant-roles.md │ ├── jsx-a11y_no-static-element-interactions.md │ ├── jsx-a11y_prefer-tag-over-role.md │ ├── jsx-a11y_role-has-required-aria-props.md │ ├── jsx-a11y_role-supports-aria-props.md │ ├── jsx-a11y_scope.md │ ├── jsx-a11y_tabindex-no-positive.md │ ├── jsx-quotes.md │ ├── key-spacing.md │ ├── keyword-spacing.md │ ├── line-comment-position.md │ ├── linebreak-style.md │ ├── lines-around-comment.md │ ├── lines-around-directive.md │ ├── lit_attribute-names.md │ ├── lit_attribute-value-entities.md │ ├── lit_ban-attributes.md │ ├── lit_binding-positions.md │ ├── lit_lifecycle-super.md │ ├── lit_no-classfield-shadowing.md │ ├── lit_no-duplicate-template-bindings.md │ ├── lit_no-invalid-escape-sequences.md │ ├── lit_no-invalid-html.md │ ├── lit_no-legacy-imports.md │ ├── lit_no-legacy-template-syntax.md │ ├── lit_no-native-attributes.md │ ├── lit_no-private-properties.md │ ├── lit_no-property-change-update.md │ ├── lit_no-template-arrow.md │ ├── lit_no-template-bind.md │ ├── lit_no-template-map.md │ ├── lit_no-this-assign-in-render.md │ ├── lit_no-useless-template-literals.md │ ├── lit_no-value-attribute.md │ ├── lit_prefer-nothing.md │ ├── lit_prefer-static-styles.md │ ├── lit_quoted-expressions.md │ ├── lit_value-after-constraints.md │ ├── lodash-fp_consistent-compose.md │ ├── lodash-fp_consistent-name.md │ ├── lodash-fp_no-argumentless-calls.md │ ├── lodash-fp_no-chain.md │ ├── lodash-fp_no-extraneous-args.md │ ├── lodash-fp_no-extraneous-function-wrapping.md │ ├── lodash-fp_no-extraneous-iteratee-args.md │ ├── lodash-fp_no-extraneous-partials.md │ ├── lodash-fp_no-for-each.md │ ├── lodash-fp_no-partial-of-curried.md │ ├── lodash-fp_no-single-composition.md │ ├── lodash-fp_no-submodule-destructuring.md │ ├── lodash-fp_no-unused-result.md │ ├── lodash-fp_prefer-compact.md │ ├── lodash-fp_prefer-composition-grouping.md │ ├── lodash-fp_prefer-constant.md │ ├── lodash-fp_prefer-flat-map.md │ ├── lodash-fp_prefer-get.md │ ├── lodash-fp_prefer-identity.md │ ├── lodash-fp_preferred-alias.md │ ├── lodash-fp_use-fp.md │ ├── lodash_callback-binding.md │ ├── lodash_chain-style.md │ ├── lodash_chaining.md │ ├── lodash_collection-method-value.md │ ├── lodash_collection-ordering.md │ ├── lodash_collection-return.md │ ├── lodash_consistent-compose.md │ ├── lodash_identity-shorthand.md │ ├── lodash_import-scope.md │ ├── lodash_matches-prop-shorthand.md │ ├── lodash_matches-shorthand.md │ ├── lodash_no-commit.md │ ├── lodash_no-double-unwrap.md │ ├── lodash_no-extra-args.md │ ├── lodash_no-unbound-this.md │ ├── lodash_path-style.md │ ├── lodash_prefer-compact.md │ ├── lodash_prefer-constant.md │ ├── lodash_prefer-filter.md │ ├── lodash_prefer-find.md │ ├── lodash_prefer-flat-map.md │ ├── lodash_prefer-get.md │ ├── lodash_prefer-immutable-method.md │ ├── lodash_prefer-includes.md │ ├── lodash_prefer-invoke-map.md │ ├── lodash_prefer-is-nil.md │ ├── lodash_prefer-lodash-chain.md │ ├── lodash_prefer-lodash-method.md │ ├── lodash_prefer-lodash-typecheck.md │ ├── lodash_prefer-map.md │ ├── lodash_prefer-matches.md │ ├── lodash_prefer-noop.md │ ├── lodash_prefer-over-quantifier.md │ ├── lodash_prefer-reject.md │ ├── lodash_prefer-some.md │ ├── lodash_prefer-startswith.md │ ├── lodash_prefer-thru.md │ ├── lodash_prefer-times.md │ ├── lodash_prefer-wrapper-method.md │ ├── lodash_preferred-alias.md │ ├── lodash_prop-shorthand.md │ ├── lodash_unwrap.md │ ├── logical-assignment-operators.md │ ├── max-classes-per-file.md │ ├── max-depth.md │ ├── max-len.md │ ├── max-lines-per-function.md │ ├── max-lines.md │ ├── max-nested-callbacks.md │ ├── max-params.md │ ├── max-statements-per-line.md │ ├── max-statements.md │ ├── meteor_audit-argument-checks.md │ ├── meteor_eventmap-params.md │ ├── meteor_no-dom-lookup-on-created.md │ ├── meteor_no-session.md │ ├── meteor_no-template-lifecycle-assignments.md │ ├── meteor_no-template-parent-data.md │ ├── meteor_no-zero-timeout.md │ ├── meteor_prefer-session-equals.md │ ├── meteor_prefix-eventmap-selectors.md │ ├── meteor_scope-dom-lookups.md │ ├── meteor_template-names.md │ ├── mocha_consistent-spacing-between-blocks.md │ ├── mocha_handle-done-callback.md │ ├── mocha_max-top-level-suites.md │ ├── mocha_no-async-describe.md │ ├── mocha_no-empty-description.md │ ├── mocha_no-exclusive-tests.md │ ├── mocha_no-exports.md │ ├── mocha_no-global-tests.md │ ├── mocha_no-hooks-for-single-case.md │ ├── mocha_no-hooks.md │ ├── mocha_no-identical-title.md │ ├── mocha_no-mocha-arrows.md │ ├── mocha_no-nested-tests.md │ ├── mocha_no-pending-tests.md │ ├── mocha_no-return-and-callback.md │ ├── mocha_no-return-from-async.md │ ├── mocha_no-setup-in-describe.md │ ├── mocha_no-sibling-hooks.md │ ├── mocha_no-skipped-tests.md │ ├── mocha_no-synchronous-tests.md │ ├── mocha_no-top-level-hooks.md │ ├── mocha_prefer-arrow-callback.md │ ├── mocha_valid-suite-description.md │ ├── mocha_valid-test-description.md │ ├── multiline-comment-style.md │ ├── multiline-ternary.md │ ├── n_callback-return.md │ ├── n_exports-style.md │ ├── n_file-extension-in-import.md │ ├── n_global-require.md │ ├── n_handle-callback-err.md │ ├── n_hashbang.md │ ├── n_no-callback-literal.md │ ├── n_no-deprecated-api.md │ ├── n_no-exports-assign.md │ ├── n_no-extraneous-import.md │ ├── n_no-extraneous-require.md │ ├── n_no-hide-core-modules.md │ ├── n_no-missing-import.md │ ├── n_no-missing-require.md │ ├── n_no-mixed-requires.md │ ├── n_no-new-require.md │ ├── n_no-path-concat.md │ ├── n_no-process-env.md │ ├── n_no-process-exit.md │ ├── n_no-restricted-import.md │ ├── n_no-restricted-require.md │ ├── n_no-sync.md │ ├── n_no-unpublished-bin.md │ ├── n_no-unpublished-import.md │ ├── n_no-unpublished-require.md │ ├── n_no-unsupported-features_es-builtins.md │ ├── n_no-unsupported-features_es-syntax.md │ ├── n_no-unsupported-features_node-builtins.md │ ├── n_prefer-global_buffer.md │ ├── n_prefer-global_console.md │ ├── n_prefer-global_process.md │ ├── n_prefer-global_text-decoder.md │ ├── n_prefer-global_text-encoder.md │ ├── n_prefer-global_url-search-params.md │ ├── n_prefer-global_url.md │ ├── n_prefer-node-protocol.md │ ├── n_prefer-promises_dns.md │ ├── n_prefer-promises_fs.md │ ├── n_process-exit-as-throw.md │ ├── n_shebang.md │ ├── new-cap.md │ ├── new-parens.md │ ├── newline-after-var.md │ ├── newline-before-return.md │ ├── newline-per-chained-call.md │ ├── no-alert.md │ ├── no-array-constructor.md │ ├── no-async-promise-executor.md │ ├── no-await-in-loop.md │ ├── no-bitwise.md │ ├── no-buffer-constructor.md │ ├── no-caller.md │ ├── no-case-declarations.md │ ├── no-catch-shadow.md │ ├── no-class-assign.md │ ├── no-compare-neg-zero.md │ ├── no-cond-assign.md │ ├── no-confusing-arrow.md │ ├── no-console.md │ ├── no-const-assign.md │ ├── no-constant-binary-expression.md │ ├── no-constant-condition.md │ ├── no-constructor-return.md │ ├── no-continue.md │ ├── no-control-regex.md │ ├── no-debugger.md │ ├── no-delete-var.md │ ├── no-div-regex.md │ ├── no-dupe-args.md │ ├── no-dupe-class-members.md │ ├── no-dupe-else-if.md │ ├── no-dupe-keys.md │ ├── no-duplicate-case.md │ ├── no-duplicate-imports.md │ ├── no-else-return.md │ ├── no-empty-character-class.md │ ├── no-empty-function.md │ ├── no-empty-pattern.md │ ├── no-empty-static-block.md │ ├── no-empty.md │ ├── no-eq-null.md │ ├── no-eval.md │ ├── no-ex-assign.md │ ├── no-extend-native.md │ ├── no-extra-bind.md │ ├── no-extra-boolean-cast.md │ ├── no-extra-label.md │ ├── no-extra-parens.md │ ├── no-extra-semi.md │ ├── no-fallthrough.md │ ├── no-floating-decimal.md │ ├── no-func-assign.md │ ├── no-global-assign.md │ ├── no-implicit-coercion.md │ ├── no-implicit-globals.md │ ├── no-implied-eval.md │ ├── no-import-assign.md │ ├── no-inline-comments.md │ ├── no-inner-declarations.md │ ├── no-invalid-regexp.md │ ├── no-invalid-this.md │ ├── no-irregular-whitespace.md │ ├── no-iterator.md │ ├── no-label-var.md │ ├── no-labels.md │ ├── no-lone-blocks.md │ ├── no-lonely-if.md │ ├── no-loop-func.md │ ├── no-loss-of-precision.md │ ├── no-magic-numbers.md │ ├── no-misleading-character-class.md │ ├── no-mixed-operators.md │ ├── no-mixed-requires.md │ ├── no-mixed-spaces-and-tabs.md │ ├── no-multi-assign.md │ ├── no-multi-spaces.md │ ├── no-multi-str.md │ ├── no-multiple-empty-lines.md │ ├── no-native-reassign.md │ ├── no-negated-condition.md │ ├── no-negated-in-lhs.md │ ├── no-nested-ternary.md │ ├── no-new-func.md │ ├── no-new-native-nonconstructor.md │ ├── no-new-object.md │ ├── no-new-require.md │ ├── no-new-symbol.md │ ├── no-new-wrappers.md │ ├── no-new.md │ ├── no-nonoctal-decimal-escape.md │ ├── no-obj-calls.md │ ├── no-object-constructor.md │ ├── no-octal-escape.md │ ├── no-octal.md │ ├── no-param-reassign.md │ ├── no-path-concat.md │ ├── no-plusplus.md │ ├── no-process-env.md │ ├── no-process-exit.md │ ├── no-promise-executor-return.md │ ├── no-proto.md │ ├── no-prototype-builtins.md │ ├── no-redeclare.md │ ├── no-regex-spaces.md │ ├── no-restricted-exports.md │ ├── no-restricted-globals.md │ ├── no-restricted-imports.md │ ├── no-restricted-modules.md │ ├── no-restricted-properties.md │ ├── no-restricted-syntax.md │ ├── no-return-assign.md │ ├── no-return-await.md │ ├── no-script-url.md │ ├── no-self-assign.md │ ├── no-self-compare.md │ ├── no-sequences.md │ ├── no-setter-return.md │ ├── no-shadow-restricted-names.md │ ├── no-shadow.md │ ├── no-spaced-func.md │ ├── no-sparse-arrays.md │ ├── no-sync.md │ ├── no-tabs.md │ ├── no-template-curly-in-string.md │ ├── no-ternary.md │ ├── no-this-before-super.md │ ├── no-throw-literal.md │ ├── no-trailing-spaces.md │ ├── no-undef-init.md │ ├── no-undef.md │ ├── no-undefined.md │ ├── no-underscore-dangle.md │ ├── no-unexpected-multiline.md │ ├── no-unmodified-loop-condition.md │ ├── no-unneeded-ternary.md │ ├── no-unreachable-loop.md │ ├── no-unreachable.md │ ├── no-unsafe-finally.md │ ├── no-unsafe-negation.md │ ├── no-unsafe-optional-chaining.md │ ├── no-unsanitized_method.md │ ├── no-unsanitized_property.md │ ├── no-unused-expressions.md │ ├── no-unused-labels.md │ ├── no-unused-private-class-members.md │ ├── no-unused-vars.md │ ├── no-use-before-define.md │ ├── no-useless-backreference.md │ ├── no-useless-call.md │ ├── no-useless-catch.md │ ├── no-useless-computed-key.md │ ├── no-useless-concat.md │ ├── no-useless-constructor.md │ ├── no-useless-escape.md │ ├── no-useless-rename.md │ ├── no-useless-return.md │ ├── no-var.md │ ├── no-void.md │ ├── no-warning-comments.md │ ├── no-whitespace-before-property.md │ ├── no-with.md │ ├── nonblock-statement-body-position.md │ ├── nuxt_no-cjs-in-config.md │ ├── nuxt_no-env-in-context.md │ ├── nuxt_no-env-in-hooks.md │ ├── nuxt_no-globals-in-created.md │ ├── nuxt_no-this-in-fetch-data.md │ ├── nuxt_no-timing-in-fetch-data.md │ ├── nuxt_require-func-head.md │ ├── object-curly-newline.md │ ├── object-curly-spacing.md │ ├── object-property-newline.md │ ├── object-shorthand.md │ ├── one-var-declaration-per-line.md │ ├── one-var.md │ ├── operator-assignment.md │ ├── operator-linebreak.md │ ├── padded-blocks.md │ ├── padding-line-between-statements.md │ ├── perfectionist_sort-array-includes.md │ ├── perfectionist_sort-astro-attributes.md │ ├── perfectionist_sort-classes.md │ ├── perfectionist_sort-enums.md │ ├── perfectionist_sort-exports.md │ ├── perfectionist_sort-imports.md │ ├── perfectionist_sort-interfaces.md │ ├── perfectionist_sort-intersection-types.md │ ├── perfectionist_sort-jsx-props.md │ ├── perfectionist_sort-maps.md │ ├── perfectionist_sort-named-exports.md │ ├── perfectionist_sort-named-imports.md │ ├── perfectionist_sort-object-types.md │ ├── perfectionist_sort-objects.md │ ├── perfectionist_sort-svelte-attributes.md │ ├── perfectionist_sort-switch-case.md │ ├── perfectionist_sort-union-types.md │ ├── perfectionist_sort-variable-declarations.md │ ├── perfectionist_sort-vue-attributes.md │ ├── playwright_expect-expect.md │ ├── playwright_max-expects.md │ ├── playwright_max-nested-describe.md │ ├── playwright_missing-playwright-await.md │ ├── playwright_no-commented-out-tests.md │ ├── playwright_no-conditional-expect.md │ ├── playwright_no-conditional-in-test.md │ ├── playwright_no-duplicate-hooks.md │ ├── playwright_no-element-handle.md │ ├── playwright_no-eval.md │ ├── playwright_no-focused-test.md │ ├── playwright_no-force-option.md │ ├── playwright_no-get-by-title.md │ ├── playwright_no-hooks.md │ ├── playwright_no-nested-step.md │ ├── playwright_no-networkidle.md │ ├── playwright_no-nth-methods.md │ ├── playwright_no-page-pause.md │ ├── playwright_no-raw-locators.md │ ├── playwright_no-restricted-matchers.md │ ├── playwright_no-skipped-test.md │ ├── playwright_no-standalone-expect.md │ ├── playwright_no-unsafe-references.md │ ├── playwright_no-useless-await.md │ ├── playwright_no-useless-not.md │ ├── playwright_no-wait-for-selector.md │ ├── playwright_no-wait-for-timeout.md │ ├── playwright_prefer-comparison-matcher.md │ ├── playwright_prefer-equality-matcher.md │ ├── playwright_prefer-hooks-in-order.md │ ├── playwright_prefer-hooks-on-top.md │ ├── playwright_prefer-lowercase-title.md │ ├── playwright_prefer-strict-equal.md │ ├── playwright_prefer-to-be.md │ ├── playwright_prefer-to-contain.md │ ├── playwright_prefer-to-have-count.md │ ├── playwright_prefer-to-have-length.md │ ├── playwright_prefer-web-first-assertions.md │ ├── playwright_require-hook.md │ ├── playwright_require-soft-assertions.md │ ├── playwright_require-to-throw-message.md │ ├── playwright_require-top-level-describe.md │ ├── playwright_valid-describe-callback.md │ ├── playwright_valid-expect-in-promise.md │ ├── playwright_valid-expect.md │ ├── playwright_valid-title.md │ ├── prefer-arrow-callback.md │ ├── prefer-const.md │ ├── prefer-destructuring.md │ ├── prefer-exponentiation-operator.md │ ├── prefer-named-capture-group.md │ ├── prefer-numeric-literals.md │ ├── prefer-object-has-own.md │ ├── prefer-object-spread.md │ ├── prefer-promise-reject-errors.md │ ├── prefer-reflect.md │ ├── prefer-regex-literals.md │ ├── prefer-rest-params.md │ ├── prefer-spread.md │ ├── prefer-template.md │ ├── promise_always-return.md │ ├── promise_avoid-new.md │ ├── promise_catch-or-return.md │ ├── promise_no-callback-in-promise.md │ ├── promise_no-multiple-resolved.md │ ├── promise_no-native.md │ ├── promise_no-nesting.md │ ├── promise_no-new-statics.md │ ├── promise_no-promise-in-callback.md │ ├── promise_no-return-in-finally.md │ ├── promise_no-return-wrap.md │ ├── promise_param-names.md │ ├── promise_prefer-await-to-callbacks.md │ ├── promise_prefer-await-to-then.md │ ├── promise_valid-params.md │ ├── quote-props.md │ ├── quotes.md │ ├── radix.md │ ├── react-native-a11y_has-accessibility-hint.md │ ├── react-native-a11y_has-accessibility-props.md │ ├── react-native-a11y_has-valid-accessibility-actions.md │ ├── react-native-a11y_has-valid-accessibility-component-type.md │ ├── react-native-a11y_has-valid-accessibility-descriptors.md │ ├── react-native-a11y_has-valid-accessibility-ignores-invert-colors.md │ ├── react-native-a11y_has-valid-accessibility-live-region.md │ ├── react-native-a11y_has-valid-accessibility-role.md │ ├── react-native-a11y_has-valid-accessibility-state.md │ ├── react-native-a11y_has-valid-accessibility-states.md │ ├── react-native-a11y_has-valid-accessibility-traits.md │ ├── react-native-a11y_has-valid-accessibility-value.md │ ├── react-native-a11y_has-valid-important-for-accessibility.md │ ├── react-native-a11y_no-nested-touchables.md │ ├── react-native_no-color-literals.md │ ├── react-native_no-inline-styles.md │ ├── react-native_no-raw-text.md │ ├── react-native_no-single-element-style-arrays.md │ ├── react-native_no-unused-styles.md │ ├── react-native_sort-styles.md │ ├── react-native_split-platform-components.md │ ├── react-perf_jsx-no-jsx-as-prop.md │ ├── react-perf_jsx-no-new-array-as-prop.md │ ├── react-perf_jsx-no-new-function-as-prop.md │ ├── react-perf_jsx-no-new-object-as-prop.md │ ├── react-redux_connect-prefer-minimum-two-arguments.md │ ├── react-redux_connect-prefer-named-arguments.md │ ├── react-redux_mapDispatchToProps-prefer-parameters-names.md │ ├── react-redux_mapDispatchToProps-prefer-shorthand.md │ ├── react-redux_mapDispatchToProps-returns-object.md │ ├── react-redux_mapStateToProps-no-store.md │ ├── react-redux_mapStateToProps-prefer-hoisted.md │ ├── react-redux_mapStateToProps-prefer-parameters-names.md │ ├── react-redux_mapStateToProps-prefer-selectors.md │ ├── react-redux_no-unused-prop-types.md │ ├── react-redux_prefer-separate-component-file.md │ ├── react-redux_useSelector-prefer-selectors.md │ ├── react_boolean-prop-naming.md │ ├── react_button-has-type.md │ ├── react_checked-requires-onchange-or-readonly.md │ ├── react_default-props-match-prop-types.md │ ├── react_destructuring-assignment.md │ ├── react_display-name.md │ ├── react_forbid-component-props.md │ ├── react_forbid-dom-props.md │ ├── react_forbid-elements.md │ ├── react_forbid-foreign-prop-types.md │ ├── react_forbid-prop-types.md │ ├── react_forward-ref-uses-ref.md │ ├── react_function-component-definition.md │ ├── react_hook-use-state.md │ ├── react_iframe-missing-sandbox.md │ ├── react_jsx-boolean-value.md │ ├── react_jsx-child-element-spacing.md │ ├── react_jsx-closing-bracket-location.md │ ├── react_jsx-closing-tag-location.md │ ├── react_jsx-curly-brace-presence.md │ ├── react_jsx-curly-newline.md │ ├── react_jsx-curly-spacing.md │ ├── react_jsx-equals-spacing.md │ ├── react_jsx-filename-extension.md │ ├── react_jsx-first-prop-new-line.md │ ├── react_jsx-fragments.md │ ├── react_jsx-handler-names.md │ ├── react_jsx-indent-props.md │ ├── react_jsx-indent.md │ ├── react_jsx-key.md │ ├── react_jsx-max-depth.md │ ├── react_jsx-max-props-per-line.md │ ├── react_jsx-newline.md │ ├── react_jsx-no-bind.md │ ├── react_jsx-no-comment-textnodes.md │ ├── react_jsx-no-constructed-context-values.md │ ├── react_jsx-no-duplicate-props.md │ ├── react_jsx-no-leaked-render.md │ ├── react_jsx-no-literals.md │ ├── react_jsx-no-script-url.md │ ├── react_jsx-no-target-blank.md │ ├── react_jsx-no-undef.md │ ├── react_jsx-no-useless-fragment.md │ ├── react_jsx-one-expression-per-line.md │ ├── react_jsx-pascal-case.md │ ├── react_jsx-props-no-multi-spaces.md │ ├── react_jsx-props-no-spread-multi.md │ ├── react_jsx-props-no-spreading.md │ ├── react_jsx-sort-default-props.md │ ├── react_jsx-sort-props.md │ ├── react_jsx-space-before-closing.md │ ├── react_jsx-tag-spacing.md │ ├── react_jsx-uses-react.md │ ├── react_jsx-uses-vars.md │ ├── react_jsx-wrap-multilines.md │ ├── react_no-access-state-in-setstate.md │ ├── react_no-adjacent-inline-elements.md │ ├── react_no-array-index-key.md │ ├── react_no-arrow-function-lifecycle.md │ ├── react_no-children-prop.md │ ├── react_no-danger-with-children.md │ ├── react_no-danger.md │ ├── react_no-deprecated.md │ ├── react_no-did-mount-set-state.md │ ├── react_no-did-update-set-state.md │ ├── react_no-direct-mutation-state.md │ ├── react_no-find-dom-node.md │ ├── react_no-invalid-html-attribute.md │ ├── react_no-is-mounted.md │ ├── react_no-multi-comp.md │ ├── react_no-namespace.md │ ├── react_no-object-type-as-default-prop.md │ ├── react_no-redundant-should-component-update.md │ ├── react_no-render-return-value.md │ ├── react_no-set-state.md │ ├── react_no-string-refs.md │ ├── react_no-this-in-sfc.md │ ├── react_no-typos.md │ ├── react_no-unescaped-entities.md │ ├── react_no-unknown-property.md │ ├── react_no-unsafe.md │ ├── react_no-unstable-nested-components.md │ ├── react_no-unused-class-component-methods.md │ ├── react_no-unused-prop-types.md │ ├── react_no-unused-state.md │ ├── react_no-will-update-set-state.md │ ├── react_prefer-es6-class.md │ ├── react_prefer-exact-props.md │ ├── react_prefer-read-only-props.md │ ├── react_prefer-stateless-function.md │ ├── react_prop-types.md │ ├── react_react-in-jsx-scope.md │ ├── react_require-default-props.md │ ├── react_require-optimization.md │ ├── react_require-render-return.md │ ├── react_self-closing-comp.md │ ├── react_sort-comp.md │ ├── react_sort-default-props.md │ ├── react_sort-prop-types.md │ ├── react_state-in-constructor.md │ ├── react_static-property-placement.md │ ├── react_style-prop-object.md │ ├── react_void-dom-elements-no-children.md │ ├── redux-saga_no-unhandled-errors.md │ ├── redux-saga_no-yield-in-race.md │ ├── redux-saga_yield-effects.md │ ├── regexp_confusing-quantifier.md │ ├── regexp_control-character-escape.md │ ├── regexp_grapheme-string-literal.md │ ├── regexp_hexadecimal-escape.md │ ├── regexp_letter-case.md │ ├── regexp_match-any.md │ ├── regexp_negation.md │ ├── regexp_no-contradiction-with-assertion.md │ ├── regexp_no-control-character.md │ ├── regexp_no-dupe-characters-character-class.md │ ├── regexp_no-dupe-disjunctions.md │ ├── regexp_no-empty-alternative.md │ ├── regexp_no-empty-capturing-group.md │ ├── regexp_no-empty-character-class.md │ ├── regexp_no-empty-group.md │ ├── regexp_no-empty-lookarounds-assertion.md │ ├── regexp_no-empty-string-literal.md │ ├── regexp_no-escape-backspace.md │ ├── regexp_no-extra-lookaround-assertions.md │ ├── regexp_no-invalid-regexp.md │ ├── regexp_no-invisible-character.md │ ├── regexp_no-lazy-ends.md │ ├── regexp_no-legacy-features.md │ ├── regexp_no-misleading-capturing-group.md │ ├── regexp_no-misleading-unicode-character.md │ ├── regexp_no-missing-g-flag.md │ ├── regexp_no-non-standard-flag.md │ ├── regexp_no-obscure-range.md │ ├── regexp_no-octal.md │ ├── regexp_no-optional-assertion.md │ ├── regexp_no-potentially-useless-backreference.md │ ├── regexp_no-standalone-backslash.md │ ├── regexp_no-super-linear-backtracking.md │ ├── regexp_no-super-linear-move.md │ ├── regexp_no-trivially-nested-assertion.md │ ├── regexp_no-trivially-nested-quantifier.md │ ├── regexp_no-unused-capturing-group.md │ ├── regexp_no-useless-assertions.md │ ├── regexp_no-useless-backreference.md │ ├── regexp_no-useless-character-class.md │ ├── regexp_no-useless-dollar-replacements.md │ ├── regexp_no-useless-escape.md │ ├── regexp_no-useless-flag.md │ ├── regexp_no-useless-lazy.md │ ├── regexp_no-useless-non-capturing-group.md │ ├── regexp_no-useless-quantifier.md │ ├── regexp_no-useless-range.md │ ├── regexp_no-useless-set-operand.md │ ├── regexp_no-useless-string-literal.md │ ├── regexp_no-useless-two-nums-quantifier.md │ ├── regexp_no-zero-quantifier.md │ ├── regexp_optimal-lookaround-quantifier.md │ ├── regexp_optimal-quantifier-concatenation.md │ ├── regexp_prefer-character-class.md │ ├── regexp_prefer-d.md │ ├── regexp_prefer-escape-replacement-dollar-char.md │ ├── regexp_prefer-lookaround.md │ ├── regexp_prefer-named-backreference.md │ ├── regexp_prefer-named-capture-group.md │ ├── regexp_prefer-named-replacement.md │ ├── regexp_prefer-plus-quantifier.md │ ├── regexp_prefer-predefined-assertion.md │ ├── regexp_prefer-quantifier.md │ ├── regexp_prefer-question-quantifier.md │ ├── regexp_prefer-range.md │ ├── regexp_prefer-regexp-exec.md │ ├── regexp_prefer-regexp-test.md │ ├── regexp_prefer-result-array-groups.md │ ├── regexp_prefer-set-operation.md │ ├── regexp_prefer-star-quantifier.md │ ├── regexp_prefer-unicode-codepoint-escapes.md │ ├── regexp_prefer-w.md │ ├── regexp_require-unicode-regexp.md │ ├── regexp_require-unicode-sets-regexp.md │ ├── regexp_simplify-set-operations.md │ ├── regexp_sort-alternatives.md │ ├── regexp_sort-character-class-elements.md │ ├── regexp_sort-flags.md │ ├── regexp_strict.md │ ├── regexp_unicode-escape.md │ ├── regexp_unicode-property.md │ ├── regexp_use-ignore-case.md │ ├── require-atomic-updates.md │ ├── require-await.md │ ├── require-jsdoc.md │ ├── require-unicode-regexp.md │ ├── require-yield.md │ ├── rest-spread-spacing.md │ ├── rxjs-angular_prefer-async-pipe.md │ ├── rxjs-angular_prefer-composition.md │ ├── rxjs-angular_prefer-takeuntil.md │ ├── rxjs_ban-observables.md │ ├── rxjs_ban-operators.md │ ├── rxjs_finnish.md │ ├── rxjs_just.md │ ├── rxjs_macro.md │ ├── rxjs_no-async-subscribe.md │ ├── rxjs_no-compat.md │ ├── rxjs_no-connectable.md │ ├── rxjs_no-create.md │ ├── rxjs_no-cyclic-action.md │ ├── rxjs_no-explicit-generics.md │ ├── rxjs_no-exposed-subjects.md │ ├── rxjs_no-finnish.md │ ├── rxjs_no-ignored-error.md │ ├── rxjs_no-ignored-notifier.md │ ├── rxjs_no-ignored-observable.md │ ├── rxjs_no-ignored-replay-buffer.md │ ├── rxjs_no-ignored-subscribe.md │ ├── rxjs_no-ignored-subscription.md │ ├── rxjs_no-ignored-takewhile-value.md │ ├── rxjs_no-implicit-any-catch.md │ ├── rxjs_no-index.md │ ├── rxjs_no-internal.md │ ├── rxjs_no-nested-subscribe.md │ ├── rxjs_no-redundant-notify.md │ ├── rxjs_no-sharereplay.md │ ├── rxjs_no-subclass.md │ ├── rxjs_no-subject-unsubscribe.md │ ├── rxjs_no-subject-value.md │ ├── rxjs_no-subscribe-handlers.md │ ├── rxjs_no-tap.md │ ├── rxjs_no-topromise.md │ ├── rxjs_no-unbound-methods.md │ ├── rxjs_no-unsafe-catch.md │ ├── rxjs_no-unsafe-first.md │ ├── rxjs_no-unsafe-subject-next.md │ ├── rxjs_no-unsafe-switchmap.md │ ├── rxjs_no-unsafe-takeuntil.md │ ├── rxjs_prefer-observer.md │ ├── rxjs_suffix-subjects.md │ ├── rxjs_throw-error.md │ ├── security-node_detect-absence-of-name-option-in-exrpress-session.md │ ├── security-node_detect-buffer-unsafe-allocation.md │ ├── security-node_detect-child-process.md │ ├── security-node_detect-crlf.md │ ├── security-node_detect-dangerous-redirects.md │ ├── security-node_detect-eval-with-expr.md │ ├── security-node_detect-html-injection.md │ ├── security-node_detect-improper-exception-handling.md │ ├── security-node_detect-insecure-randomness.md │ ├── security-node_detect-non-literal-require-calls.md │ ├── security-node_detect-nosql-injection.md │ ├── security-node_detect-option-multiplestatements-in-mysql.md │ ├── security-node_detect-option-rejectunauthorized-in-nodejs-httpsrequest.md │ ├── security-node_detect-option-unsafe-in-serialize-javascript-npm-package.md │ ├── security-node_detect-possible-timing-attacks.md │ ├── security-node_detect-runinthiscontext-method-in-nodes-vm.md │ ├── security-node_detect-security-missconfiguration-cookie.md │ ├── security-node_detect-sql-injection.md │ ├── security-node_detect-unhandled-async-errors.md │ ├── security-node_detect-unhandled-event-errors.md │ ├── security-node_disable-ssl-across-node-server.md │ ├── security-node_non-literal-reg-expr.md │ ├── security_detect-bidi-characters.md │ ├── security_detect-buffer-noassert.md │ ├── security_detect-child-process.md │ ├── security_detect-disable-mustache-escape.md │ ├── security_detect-eval-with-expression.md │ ├── security_detect-new-buffer.md │ ├── security_detect-no-csrf-before-method-override.md │ ├── security_detect-non-literal-fs-filename.md │ ├── security_detect-non-literal-regexp.md │ ├── security_detect-non-literal-require.md │ ├── security_detect-object-injection.md │ ├── security_detect-possible-timing-attacks.md │ ├── security_detect-pseudoRandomBytes.md │ ├── security_detect-unsafe-regex.md │ ├── semi-spacing.md │ ├── semi-style.md │ ├── semi.md │ ├── sonarjs_cognitive-complexity.md │ ├── sonarjs_elseif-without-else.md │ ├── sonarjs_max-switch-cases.md │ ├── sonarjs_no-all-duplicated-branches.md │ ├── sonarjs_no-collapsible-if.md │ ├── sonarjs_no-collection-size-mischeck.md │ ├── sonarjs_no-duplicate-string.md │ ├── sonarjs_no-duplicated-branches.md │ ├── sonarjs_no-element-overwrite.md │ ├── sonarjs_no-empty-collection.md │ ├── sonarjs_no-extra-arguments.md │ ├── sonarjs_no-gratuitous-expressions.md │ ├── sonarjs_no-identical-conditions.md │ ├── sonarjs_no-identical-expressions.md │ ├── sonarjs_no-identical-functions.md │ ├── sonarjs_no-ignored-return.md │ ├── sonarjs_no-inverted-boolean-check.md │ ├── sonarjs_no-nested-switch.md │ ├── sonarjs_no-nested-template-literals.md │ ├── sonarjs_no-one-iteration-loop.md │ ├── sonarjs_no-redundant-boolean.md │ ├── sonarjs_no-redundant-jump.md │ ├── sonarjs_no-same-line-conditional.md │ ├── sonarjs_no-small-switch.md │ ├── sonarjs_no-unused-collection.md │ ├── sonarjs_no-use-of-empty-return-value.md │ ├── sonarjs_no-useless-catch.md │ ├── sonarjs_non-existent-operator.md │ ├── sonarjs_prefer-immediate-return.md │ ├── sonarjs_prefer-object-literal.md │ ├── sonarjs_prefer-single-boolean-return.md │ ├── sonarjs_prefer-while.md │ ├── sort-destructure-keys_sort-destructure-keys.md │ ├── sort-imports.md │ ├── sort-keys.md │ ├── sort-vars.md │ ├── sort_destructuring-properties.md │ ├── sort_export-members.md │ ├── sort_exports.md │ ├── sort_import-members.md │ ├── sort_imports.md │ ├── sort_object-properties.md │ ├── sort_string-enums.md │ ├── sort_string-unions.md │ ├── sort_type-properties.md │ ├── space-before-blocks.md │ ├── space-before-function-paren.md │ ├── space-in-parens.md │ ├── space-infix-ops.md │ ├── space-unary-ops.md │ ├── spaced-comment.md │ ├── storybook_await-interactions.md │ ├── storybook_context-in-play-function.md │ ├── storybook_csf-component.md │ ├── storybook_default-exports.md │ ├── storybook_hierarchy-separator.md │ ├── storybook_meta-inline-properties.md │ ├── storybook_no-redundant-story-name.md │ ├── storybook_no-stories-of.md │ ├── storybook_no-title-property-in-meta.md │ ├── storybook_no-uninstalled-addons.md │ ├── storybook_prefer-pascal-case.md │ ├── storybook_story-exports.md │ ├── storybook_use-storybook-expect.md │ ├── storybook_use-storybook-testing-library.md │ ├── strict.md │ ├── suitescript_api-version.md │ ├── suitescript_entry-points.md │ ├── suitescript_log-args.md │ ├── suitescript_module-vars.md │ ├── suitescript_no-amd-name.md │ ├── suitescript_no-extra-modules.md │ ├── suitescript_no-invalid-modules.md │ ├── suitescript_no-log-module.md │ ├── suitescript_no-module-extensions.md │ ├── suitescript_script-type.md │ ├── switch-colon-spacing.md │ ├── symbol-description.md │ ├── tailwindcss_classnames-order.md │ ├── tailwindcss_enforces-negative-arbitrary-values.md │ ├── tailwindcss_enforces-shorthand.md │ ├── tailwindcss_migration-from-tailwind-2.md │ ├── tailwindcss_no-arbitrary-value.md │ ├── tailwindcss_no-contradicting-classname.md │ ├── tailwindcss_no-custom-classname.md │ ├── tailwindcss_no-unnecessary-arbitrary-value.md │ ├── template-curly-spacing.md │ ├── template-tag-spacing.md │ ├── test-selectors_anchor.md │ ├── test-selectors_button.md │ ├── test-selectors_input.md │ ├── test-selectors_onChange.md │ ├── test-selectors_onClick.md │ ├── test-selectors_onKeyDown.md │ ├── test-selectors_onKeyUp.md │ ├── test-selectors_onSubmit.md │ ├── testing-library_await-async-events.md │ ├── testing-library_await-async-queries.md │ ├── testing-library_await-async-utils.md │ ├── testing-library_consistent-data-testid.md │ ├── testing-library_no-await-sync-events.md │ ├── testing-library_no-await-sync-queries.md │ ├── testing-library_no-container.md │ ├── testing-library_no-debugging-utils.md │ ├── testing-library_no-dom-import.md │ ├── testing-library_no-global-regexp-flag-in-query.md │ ├── testing-library_no-manual-cleanup.md │ ├── testing-library_no-node-access.md │ ├── testing-library_no-promise-in-fire-event.md │ ├── testing-library_no-render-in-lifecycle.md │ ├── testing-library_no-unnecessary-act.md │ ├── testing-library_no-wait-for-multiple-assertions.md │ ├── testing-library_no-wait-for-side-effects.md │ ├── testing-library_no-wait-for-snapshot.md │ ├── testing-library_prefer-explicit-assert.md │ ├── testing-library_prefer-find-by.md │ ├── testing-library_prefer-implicit-assert.md │ ├── testing-library_prefer-presence-queries.md │ ├── testing-library_prefer-query-by-disappearance.md │ ├── testing-library_prefer-query-matchers.md │ ├── testing-library_prefer-screen-queries.md │ ├── testing-library_prefer-user-event.md │ ├── testing-library_render-result-naming-convention.md │ ├── turbo_no-undeclared-env-vars.md │ ├── typescript-sort-keys_interface.md │ ├── typescript-sort-keys_string-enum.md │ ├── unicode-bom.md │ ├── unicorn_better-regex.md │ ├── unicorn_catch-error-name.md │ ├── unicorn_consistent-destructuring.md │ ├── unicorn_consistent-empty-array-spread.md │ ├── unicorn_consistent-function-scoping.md │ ├── unicorn_custom-error-definition.md │ ├── unicorn_empty-brace-spaces.md │ ├── unicorn_error-message.md │ ├── unicorn_escape-case.md │ ├── unicorn_expiring-todo-comments.md │ ├── unicorn_explicit-length-check.md │ ├── unicorn_filename-case.md │ ├── unicorn_import-style.md │ ├── unicorn_new-for-builtins.md │ ├── unicorn_no-abusive-eslint-disable.md │ ├── unicorn_no-anonymous-default-export.md │ ├── unicorn_no-array-callback-reference.md │ ├── unicorn_no-array-for-each.md │ ├── unicorn_no-array-method-this-argument.md │ ├── unicorn_no-array-push-push.md │ ├── unicorn_no-array-reduce.md │ ├── unicorn_no-await-expression-member.md │ ├── unicorn_no-await-in-promise-methods.md │ ├── unicorn_no-console-spaces.md │ ├── unicorn_no-document-cookie.md │ ├── unicorn_no-empty-file.md │ ├── unicorn_no-for-loop.md │ ├── unicorn_no-hex-escape.md │ ├── unicorn_no-instanceof-array.md │ ├── unicorn_no-invalid-fetch-options.md │ ├── unicorn_no-invalid-remove-event-listener.md │ ├── unicorn_no-keyword-prefix.md │ ├── unicorn_no-length-as-slice-end.md │ ├── unicorn_no-lonely-if.md │ ├── unicorn_no-magic-array-flat-depth.md │ ├── unicorn_no-negated-condition.md │ ├── unicorn_no-negation-in-equality-check.md │ ├── unicorn_no-nested-ternary.md │ ├── unicorn_no-new-array.md │ ├── unicorn_no-new-buffer.md │ ├── unicorn_no-null.md │ ├── unicorn_no-object-as-default-parameter.md │ ├── unicorn_no-process-exit.md │ ├── unicorn_no-single-promise-in-promise-methods.md │ ├── unicorn_no-static-only-class.md │ ├── unicorn_no-thenable.md │ ├── unicorn_no-this-assignment.md │ ├── unicorn_no-typeof-undefined.md │ ├── unicorn_no-unnecessary-await.md │ ├── unicorn_no-unnecessary-polyfills.md │ ├── unicorn_no-unreadable-array-destructuring.md │ ├── unicorn_no-unreadable-iife.md │ ├── unicorn_no-unused-properties.md │ ├── unicorn_no-useless-fallback-in-spread.md │ ├── unicorn_no-useless-length-check.md │ ├── unicorn_no-useless-promise-resolve-reject.md │ ├── unicorn_no-useless-spread.md │ ├── unicorn_no-useless-switch-case.md │ ├── unicorn_no-useless-undefined.md │ ├── unicorn_no-zero-fractions.md │ ├── unicorn_number-literal-case.md │ ├── unicorn_numeric-separators-style.md │ ├── unicorn_prefer-add-event-listener.md │ ├── unicorn_prefer-array-find.md │ ├── unicorn_prefer-array-flat-map.md │ ├── unicorn_prefer-array-flat.md │ ├── unicorn_prefer-array-index-of.md │ ├── unicorn_prefer-array-some.md │ ├── unicorn_prefer-at.md │ ├── unicorn_prefer-blob-reading-methods.md │ ├── unicorn_prefer-code-point.md │ ├── unicorn_prefer-date-now.md │ ├── unicorn_prefer-default-parameters.md │ ├── unicorn_prefer-dom-node-append.md │ ├── unicorn_prefer-dom-node-dataset.md │ ├── unicorn_prefer-dom-node-remove.md │ ├── unicorn_prefer-dom-node-text-content.md │ ├── unicorn_prefer-event-target.md │ ├── unicorn_prefer-export-from.md │ ├── unicorn_prefer-includes.md │ ├── unicorn_prefer-json-parse-buffer.md │ ├── unicorn_prefer-keyboard-event-key.md │ ├── unicorn_prefer-logical-operator-over-ternary.md │ ├── unicorn_prefer-math-trunc.md │ ├── unicorn_prefer-modern-dom-apis.md │ ├── unicorn_prefer-modern-math-apis.md │ ├── unicorn_prefer-module.md │ ├── unicorn_prefer-native-coercion-functions.md │ ├── unicorn_prefer-negative-index.md │ ├── unicorn_prefer-node-protocol.md │ ├── unicorn_prefer-number-properties.md │ ├── unicorn_prefer-object-from-entries.md │ ├── unicorn_prefer-optional-catch-binding.md │ ├── unicorn_prefer-prototype-methods.md │ ├── unicorn_prefer-query-selector.md │ ├── unicorn_prefer-reflect-apply.md │ ├── unicorn_prefer-regexp-test.md │ ├── unicorn_prefer-set-has.md │ ├── unicorn_prefer-set-size.md │ ├── unicorn_prefer-spread.md │ ├── unicorn_prefer-string-raw.md │ ├── unicorn_prefer-string-replace-all.md │ ├── unicorn_prefer-string-slice.md │ ├── unicorn_prefer-string-starts-ends-with.md │ ├── unicorn_prefer-string-trim-start-end.md │ ├── unicorn_prefer-structured-clone.md │ ├── unicorn_prefer-switch.md │ ├── unicorn_prefer-ternary.md │ ├── unicorn_prefer-top-level-await.md │ ├── unicorn_prefer-type-error.md │ ├── unicorn_prevent-abbreviations.md │ ├── unicorn_relative-url-style.md │ ├── unicorn_require-array-join-separator.md │ ├── unicorn_require-number-to-fixed-digits-argument.md │ ├── unicorn_require-post-message-target-origin.md │ ├── unicorn_string-content.md │ ├── unicorn_switch-case-braces.md │ ├── unicorn_template-indent.md │ ├── unicorn_text-encoding-identifier-case.md │ ├── unicorn_throw-new-error.md │ ├── unused-imports_no-unused-imports.md │ ├── unused-imports_no-unused-vars.md │ ├── use-isnan.md │ ├── valid-jsdoc.md │ ├── valid-typeof.md │ ├── vars-on-top.md │ ├── vue-scoped-css_enforce-style-type.md │ ├── vue-scoped-css_no-deprecated-deep-combinator.md │ ├── vue-scoped-css_no-deprecated-v-enter-v-leave-class.md │ ├── vue-scoped-css_no-parent-of-v-global.md │ ├── vue-scoped-css_no-parsing-error.md │ ├── vue-scoped-css_no-unused-keyframes.md │ ├── vue-scoped-css_no-unused-selector.md │ ├── vue-scoped-css_require-scoped.md │ ├── vue-scoped-css_require-selector-used-inside.md │ ├── vue-scoped-css_require-v-deep-argument.md │ ├── vue-scoped-css_require-v-global-argument.md │ ├── vue-scoped-css_require-v-slotted-argument.md │ ├── vue-scoped-css_v-deep-pseudo-style.md │ ├── vue-scoped-css_v-global-pseudo-style.md │ ├── vue-scoped-css_v-slotted-pseudo-style.md │ ├── vue_array-bracket-newline.md │ ├── vue_array-bracket-spacing.md │ ├── vue_array-element-newline.md │ ├── vue_arrow-spacing.md │ ├── vue_attribute-hyphenation.md │ ├── vue_attributes-order.md │ ├── vue_block-lang.md │ ├── vue_block-order.md │ ├── vue_block-spacing.md │ ├── vue_block-tag-newline.md │ ├── vue_brace-style.md │ ├── vue_camelcase.md │ ├── vue_comma-dangle.md │ ├── vue_comma-spacing.md │ ├── vue_comma-style.md │ ├── vue_comment-directive.md │ ├── vue_component-api-style.md │ ├── vue_component-definition-name-casing.md │ ├── vue_component-name-in-template-casing.md │ ├── vue_component-options-name-casing.md │ ├── vue_component-tags-order.md │ ├── vue_custom-event-name-casing.md │ ├── vue_define-emits-declaration.md │ ├── vue_define-macros-order.md │ ├── vue_define-props-declaration.md │ ├── vue_dot-location.md │ ├── vue_dot-notation.md │ ├── vue_enforce-style-attribute.md │ ├── vue_eqeqeq.md │ ├── vue_first-attribute-linebreak.md │ ├── vue_func-call-spacing.md │ ├── vue_html-button-has-type.md │ ├── vue_html-closing-bracket-newline.md │ ├── vue_html-closing-bracket-spacing.md │ ├── vue_html-comment-content-newline.md │ ├── vue_html-comment-content-spacing.md │ ├── vue_html-comment-indent.md │ ├── vue_html-end-tags.md │ ├── vue_html-indent.md │ ├── vue_html-quotes.md │ ├── vue_html-self-closing.md │ ├── vue_jsx-uses-vars.md │ ├── vue_key-spacing.md │ ├── vue_keyword-spacing.md │ ├── vue_match-component-file-name.md │ ├── vue_match-component-import-name.md │ ├── vue_max-attributes-per-line.md │ ├── vue_max-len.md │ ├── vue_max-lines-per-block.md │ ├── vue_max-props.md │ ├── vue_max-template-depth.md │ ├── vue_multi-word-component-names.md │ ├── vue_multiline-html-element-content-newline.md │ ├── vue_multiline-ternary.md │ ├── vue_mustache-interpolation-spacing.md │ ├── vue_new-line-between-multi-line-property.md │ ├── vue_next-tick-style.md │ ├── vue_no-arrow-functions-in-watch.md │ ├── vue_no-async-in-computed-properties.md │ ├── vue_no-bare-strings-in-template.md │ ├── vue_no-boolean-default.md │ ├── vue_no-child-content.md │ ├── vue_no-computed-properties-in-data.md │ ├── vue_no-console.md │ ├── vue_no-constant-condition.md │ ├── vue_no-custom-modifiers-on-v-model.md │ ├── vue_no-deprecated-data-object-declaration.md │ ├── vue_no-deprecated-delete-set.md │ ├── vue_no-deprecated-destroyed-lifecycle.md │ ├── vue_no-deprecated-dollar-listeners-api.md │ ├── vue_no-deprecated-dollar-scopedslots-api.md │ ├── vue_no-deprecated-events-api.md │ ├── vue_no-deprecated-filter.md │ ├── vue_no-deprecated-functional-template.md │ ├── vue_no-deprecated-html-element-is.md │ ├── vue_no-deprecated-inline-template.md │ ├── vue_no-deprecated-model-definition.md │ ├── vue_no-deprecated-props-default-this.md │ ├── vue_no-deprecated-router-link-tag-prop.md │ ├── vue_no-deprecated-scope-attribute.md │ ├── vue_no-deprecated-slot-attribute.md │ ├── vue_no-deprecated-slot-scope-attribute.md │ ├── vue_no-deprecated-v-bind-sync.md │ ├── vue_no-deprecated-v-is.md │ ├── vue_no-deprecated-v-on-native-modifier.md │ ├── vue_no-deprecated-v-on-number-modifiers.md │ ├── vue_no-deprecated-vue-config-keycodes.md │ ├── vue_no-dupe-keys.md │ ├── vue_no-dupe-v-else-if.md │ ├── vue_no-duplicate-attr-inheritance.md │ ├── vue_no-duplicate-attributes.md │ ├── vue_no-empty-component-block.md │ ├── vue_no-empty-pattern.md │ ├── vue_no-export-in-script-setup.md │ ├── vue_no-expose-after-await.md │ ├── vue_no-extra-parens.md │ ├── vue_no-invalid-model-keys.md │ ├── vue_no-irregular-whitespace.md │ ├── vue_no-lifecycle-after-await.md │ ├── vue_no-lone-template.md │ ├── vue_no-loss-of-precision.md │ ├── vue_no-multi-spaces.md │ ├── vue_no-multiple-objects-in-class.md │ ├── vue_no-multiple-slot-args.md │ ├── vue_no-multiple-template-root.md │ ├── vue_no-mutating-props.md │ ├── vue_no-parsing-error.md │ ├── vue_no-potential-component-option-typo.md │ ├── vue_no-ref-as-operand.md │ ├── vue_no-ref-object-destructure.md │ ├── vue_no-ref-object-reactivity-loss.md │ ├── vue_no-required-prop-with-default.md │ ├── vue_no-reserved-component-names.md │ ├── vue_no-reserved-keys.md │ ├── vue_no-reserved-props.md │ ├── vue_no-restricted-block.md │ ├── vue_no-restricted-call-after-await.md │ ├── vue_no-restricted-class.md │ ├── vue_no-restricted-component-names.md │ ├── vue_no-restricted-component-options.md │ ├── vue_no-restricted-custom-event.md │ ├── vue_no-restricted-html-elements.md │ ├── vue_no-restricted-props.md │ ├── vue_no-restricted-static-attribute.md │ ├── vue_no-restricted-syntax.md │ ├── vue_no-restricted-v-bind.md │ ├── vue_no-restricted-v-on.md │ ├── vue_no-root-v-if.md │ ├── vue_no-setup-props-destructure.md │ ├── vue_no-setup-props-reactivity-loss.md │ ├── vue_no-shared-component-data.md │ ├── vue_no-side-effects-in-computed-properties.md │ ├── vue_no-spaces-around-equal-signs-in-attribute.md │ ├── vue_no-sparse-arrays.md │ ├── vue_no-static-inline-styles.md │ ├── vue_no-template-key.md │ ├── vue_no-template-shadow.md │ ├── vue_no-template-target-blank.md │ ├── vue_no-textarea-mustache.md │ ├── vue_no-this-in-before-route-enter.md │ ├── vue_no-undef-components.md │ ├── vue_no-undef-properties.md │ ├── vue_no-unsupported-features.md │ ├── vue_no-unused-components.md │ ├── vue_no-unused-emit-declarations.md │ ├── vue_no-unused-properties.md │ ├── vue_no-unused-refs.md │ ├── vue_no-unused-vars.md │ ├── vue_no-use-computed-property-like-method.md │ ├── vue_no-use-v-else-with-v-for.md │ ├── vue_no-use-v-if-with-v-for.md │ ├── vue_no-useless-concat.md │ ├── vue_no-useless-mustaches.md │ ├── vue_no-useless-template-attributes.md │ ├── vue_no-useless-v-bind.md │ ├── vue_no-v-for-template-key-on-child.md │ ├── vue_no-v-for-template-key.md │ ├── vue_no-v-html.md │ ├── vue_no-v-model-argument.md │ ├── vue_no-v-text-v-html-on-component.md │ ├── vue_no-v-text.md │ ├── vue_no-watch-after-await.md │ ├── vue_object-curly-newline.md │ ├── vue_object-curly-spacing.md │ ├── vue_object-property-newline.md │ ├── vue_object-shorthand.md │ ├── vue_one-component-per-file.md │ ├── vue_operator-linebreak.md │ ├── vue_order-in-components.md │ ├── vue_padding-line-between-blocks.md │ ├── vue_padding-line-between-tags.md │ ├── vue_padding-lines-in-component-definition.md │ ├── vue_prefer-define-options.md │ ├── vue_prefer-import-from-vue.md │ ├── vue_prefer-prop-type-boolean-first.md │ ├── vue_prefer-separate-static-class.md │ ├── vue_prefer-template.md │ ├── vue_prefer-true-attribute-shorthand.md │ ├── vue_prefer-use-template-ref.md │ ├── vue_prop-name-casing.md │ ├── vue_quote-props.md │ ├── vue_require-component-is.md │ ├── vue_require-default-export.md │ ├── vue_require-default-prop.md │ ├── vue_require-direct-export.md │ ├── vue_require-emit-validator.md │ ├── vue_require-explicit-emits.md │ ├── vue_require-explicit-slots.md │ ├── vue_require-expose.md │ ├── vue_require-macro-variable-name.md │ ├── vue_require-name-property.md │ ├── vue_require-prop-comment.md │ ├── vue_require-prop-type-constructor.md │ ├── vue_require-prop-types.md │ ├── vue_require-render-return.md │ ├── vue_require-slots-as-functions.md │ ├── vue_require-toggle-inside-transition.md │ ├── vue_require-typed-object-prop.md │ ├── vue_require-typed-ref.md │ ├── vue_require-v-for-key.md │ ├── vue_require-valid-default-prop.md │ ├── vue_restricted-component-names.md │ ├── vue_return-in-computed-property.md │ ├── vue_return-in-emits-validator.md │ ├── vue_script-indent.md │ ├── vue_script-setup-uses-vars.md │ ├── vue_singleline-html-element-content-newline.md │ ├── vue_slot-name-casing.md │ ├── vue_sort-keys.md │ ├── vue_space-in-parens.md │ ├── vue_space-infix-ops.md │ ├── vue_space-unary-ops.md │ ├── vue_static-class-names-order.md │ ├── vue_template-curly-spacing.md │ ├── vue_this-in-template.md │ ├── vue_use-v-on-exact.md │ ├── vue_v-bind-style.md │ ├── vue_v-for-delimiter-style.md │ ├── vue_v-if-else-key.md │ ├── vue_v-on-event-hyphenation.md │ ├── vue_v-on-function-call.md │ ├── vue_v-on-handler-style.md │ ├── vue_v-on-style.md │ ├── vue_v-slot-style.md │ ├── vue_valid-attribute-name.md │ ├── vue_valid-define-emits.md │ ├── vue_valid-define-options.md │ ├── vue_valid-define-props.md │ ├── vue_valid-model-definition.md │ ├── vue_valid-next-tick.md │ ├── vue_valid-template-root.md │ ├── vue_valid-v-bind-sync.md │ ├── vue_valid-v-bind.md │ ├── vue_valid-v-cloak.md │ ├── vue_valid-v-else-if.md │ ├── vue_valid-v-else.md │ ├── vue_valid-v-for.md │ ├── vue_valid-v-html.md │ ├── vue_valid-v-if.md │ ├── vue_valid-v-is.md │ ├── vue_valid-v-memo.md │ ├── vue_valid-v-model.md │ ├── vue_valid-v-on.md │ ├── vue_valid-v-once.md │ ├── vue_valid-v-pre.md │ ├── vue_valid-v-show.md │ ├── vue_valid-v-slot.md │ ├── vue_valid-v-text.md │ ├── vuejs-accessibility_alt-text.md │ ├── vuejs-accessibility_anchor-has-content.md │ ├── vuejs-accessibility_aria-props.md │ ├── vuejs-accessibility_aria-role.md │ ├── vuejs-accessibility_aria-unsupported-elements.md │ ├── vuejs-accessibility_click-events-have-key-events.md │ ├── vuejs-accessibility_form-control-has-label.md │ ├── vuejs-accessibility_heading-has-content.md │ ├── vuejs-accessibility_iframe-has-title.md │ ├── vuejs-accessibility_interactive-supports-focus.md │ ├── vuejs-accessibility_label-has-for.md │ ├── vuejs-accessibility_media-has-caption.md │ ├── vuejs-accessibility_mouse-events-have-key-events.md │ ├── vuejs-accessibility_no-access-key.md │ ├── vuejs-accessibility_no-aria-hidden-on-focusable.md │ ├── vuejs-accessibility_no-autofocus.md │ ├── vuejs-accessibility_no-distracting-elements.md │ ├── vuejs-accessibility_no-onchange.md │ ├── vuejs-accessibility_no-redundant-roles.md │ ├── vuejs-accessibility_no-role-presentation-on-focusable.md │ ├── vuejs-accessibility_no-static-element-interactions.md │ ├── vuejs-accessibility_role-has-required-aria-props.md │ ├── vuejs-accessibility_tabindex-no-positive.md │ ├── vuetify_grid-unknown-attributes.md │ ├── vuetify_icon-button-variant.md │ ├── vuetify_no-deprecated-classes.md │ ├── vuetify_no-deprecated-colors.md │ ├── vuetify_no-deprecated-components.md │ ├── vuetify_no-deprecated-events.md │ ├── vuetify_no-deprecated-props.md │ ├── vuetify_no-deprecated-slots.md │ ├── wdio_await-expect.md │ ├── wdio_no-debug.md │ ├── wdio_no-pause.md │ ├── wrap-regex.md │ ├── xss_no-location-href-assign.md │ ├── xss_no-mixed-html.md │ ├── yield-star-spacing.md │ ├── yml_block-mapping-colon-indicator-newline.md │ ├── yml_block-mapping-question-indicator-newline.md │ ├── yml_block-mapping.md │ ├── yml_block-sequence-hyphen-indicator-newline.md │ ├── yml_block-sequence.md │ ├── yml_file-extension.md │ ├── yml_flow-mapping-curly-newline.md │ ├── yml_flow-mapping-curly-spacing.md │ ├── yml_flow-sequence-bracket-newline.md │ ├── yml_flow-sequence-bracket-spacing.md │ ├── yml_indent.md │ ├── yml_key-name-casing.md │ ├── yml_key-spacing.md │ ├── yml_no-empty-document.md │ ├── yml_no-empty-key.md │ ├── yml_no-empty-mapping-value.md │ ├── yml_no-empty-sequence-entry.md │ ├── yml_no-irregular-whitespace.md │ ├── yml_no-multiple-empty-lines.md │ ├── yml_no-tab-indent.md │ ├── yml_no-trailing-zeros.md │ ├── yml_plain-scalar.md │ ├── yml_quotes.md │ ├── yml_require-string-key.md │ ├── yml_sort-keys.md │ ├── yml_spaced-comment.md │ ├── yml_vue-custom-block_no-parsing-error.md │ └── yoda.md ├── multiple-tests │ ├── all-patterns-typescript │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── test.ts │ │ │ └── tsconfig.json │ ├── all-patterns │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ ├── all-patterns.js │ │ │ └── tsconfig.json │ ├── big-codacy-configuration │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── big-codacy-configuration.js │ ├── blacklist-patterns │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.yml │ │ │ └── blacklist-patterns.js │ ├── custom-parser │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.yml │ │ │ └── custom-parser.js │ ├── ember_no-restricted-service-injections-no-parameters │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── ember_no-restricted-service-injections-no-parameters.js │ ├── ember_no-restricted-service-injections │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── ember_no-restricted-service-injections.js │ ├── file-errors │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.js │ │ │ ├── file-errors-broken.js │ │ │ └── file-errors-correct.js │ ├── jsdoc_check-examples │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.js │ │ │ └── jsdoc_check-examples.js │ ├── json-file │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── json-file.json │ ├── prettier-import │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ ├── .prettierrc.json │ │ │ └── prettier-import.ts │ ├── prettier-in-eslintrc │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ └── prettier-in-eslintrc.js │ ├── prettier │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ ├── .prettierrc.json │ │ │ └── prettier.js │ ├── react-without-config │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── react-without-config.jsx │ ├── security-node │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ └── security-node.js │ ├── storybook_default-rules-only-for-story-files │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── empty.js │ │ │ └── empty.story.ts │ ├── ts-import-without-config-file │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── ts-import-without-config-file.ts │ ├── tsconfig-relative-path │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ ├── tsconfig-relative-path.ts │ │ │ └── tsconfig.json │ ├── typescript-with-config-file-import-plugin │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ └── typescript-with-config-file-import-plugin.tsx │ ├── typescript-with-config-file │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.json │ │ │ └── typescript-with-config-file.ts │ ├── typescript-without-config-file │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ └── typescript-without-config-file.ts │ ├── with-config-file │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ │ ├── .eslintrc.js │ │ │ └── with-config-file.js │ └── without-config-file │ │ ├── patterns.xml │ │ ├── results.xml │ │ └── src │ │ └── without-config-file.js ├── patterns.json └── tool-description.md ├── entrypoint.sh ├── package-lock.json ├── package.json ├── src ├── blacklist.ts ├── computeSuggestion.ts ├── configCreator.ts ├── convertResults.ts ├── docGenerator.ts ├── docGeneratorMain.ts ├── docGeneratorStringUtils.ts ├── engineImpl.ts ├── eslintDefaultOptions.ts ├── eslintPlugins.ts ├── index.ts ├── logging.ts ├── model │ └── patterns.ts ├── namedParameters.ts ├── rulesToUnnamedParametersDefaults.ts ├── runEngine.ts ├── test │ ├── computeSuggestion.spec.ts │ ├── convertResults.spec.ts │ ├── docGenerator.spec.ts │ ├── docGeneratorStringUtils.spec.ts │ ├── model │ │ └── patterns.spec.ts │ └── namedParameters.spec.ts └── toolMetadata.ts ├── tsconfig.json └── tsconfig.src.json /.codacyrc: -------------------------------------------------------------------------------- 1 | { 2 | "tools": [ 3 | { 4 | "name": "eslint-8" 5 | } 6 | ] 7 | } -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | # Ignore everything 2 | ** 3 | 4 | # Allow files and directories 5 | !/src 6 | !/docs 7 | !/package.json 8 | !/package-lock.json 9 | !/tsconfig.json 10 | !/tsconfig.src.json 11 | !/entrypoint.sh 12 | 13 | # Ignore unnecessary files inside allowed directories 14 | # This should go after the allowed directories 15 | **/.DS_Store 16 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | dist/* 3 | build/* 4 | bin/* 5 | docs/tests/* 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | docs/description/* linguist-generated=true 2 | docs/patterns.json linguist-generated=true 3 | docs/tool-description.md linguist-generated=true 4 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @codacy/toss 2 | -------------------------------------------------------------------------------- /.github/workflows/auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: auto-merge 2 | 3 | on: 4 | pull_request_target: 5 | 6 | jobs: 7 | auto-merge: 8 | runs-on: ubuntu-latest 9 | if: github.actor == 'dependabot[bot]' 10 | steps: 11 | - uses: actions/checkout@v2 12 | with: 13 | ref: ${{ github.event.pull_request.head.sha }} 14 | - uses: ahmadnassri/action-dependabot-auto-merge@v2 15 | with: 16 | target: major 17 | github-token: ${{ secrets.GITHUB_TOKEN }} 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | /node_modules 3 | .metals 4 | /dist 5 | tsconfig.tsbuildinfo 6 | .DS_Store 7 | .vscode 8 | .codarcyrc 9 | /tests 10 | .eslintcache -------------------------------------------------------------------------------- /.remarkrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "preset-lint-consistent", 4 | "preset-lint-recommended", 5 | "lint-heading-increment", 6 | [ 7 | "lint-unordered-list-marker-style", "-" 8 | ] 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts-alpine3.21 AS builder 2 | 3 | COPY package.json package-lock.json ./ 4 | 5 | RUN npm install --legacy-peer-deps --omit=dev &&\ 6 | npm cache clean --force 7 | 8 | COPY src src 9 | COPY docs docs 10 | COPY tsconfig.json ./ 11 | 12 | RUN npm run build:docs &&\ 13 | npm run test 14 | 15 | FROM node:lts-alpine3.21 16 | 17 | COPY --from=builder --chown=docker:docker dist dist 18 | COPY --from=builder --chown=docker:docker docs docs 19 | COPY --from=builder node_modules node_modules 20 | COPY --chown=docker:docker tsconfig.src.json tsconfig.json 21 | COPY entrypoint.sh entrypoint.sh 22 | 23 | RUN adduser -u 2004 -D docker &&\ 24 | chmod +x entrypoint.sh 25 | 26 | WORKDIR /src 27 | 28 | CMD [ "/entrypoint.sh" ] 29 | -------------------------------------------------------------------------------- /docs/description/@lwc_lwc_no-async-await.md: -------------------------------------------------------------------------------- 1 | # Disallow use of the async-await syntax (no-async-await) 2 | 3 | The [async-await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) syntax was introduced in ES8. In old browsers, this syntax is transpiled down to ES5, which can cause performance issues if the code is executed many times. To ensure that code performs well even in old browsers, use a standard promise chain instead. 4 | 5 | ## Rule details 6 | 7 | Example of **incorrect** code: 8 | 9 | ```js 10 | async function fetchJSON(url) { 11 | const res = await fetch(url); 12 | return res.json(); 13 | } 14 | ``` 15 | 16 | Example of **correct** code: 17 | 18 | ```js 19 | function fetchJSON(url) { 20 | return fetch(url).then((res) => res.json()); 21 | } 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/description/@lwc_lwc_no-deprecated.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of deprecated LWC APIs (no-deprecated) 2 | 3 | The following LWC lifecycle hooks have been deprecated and removed: 4 | 5 | - `attributeChangedCallback` 6 | - `observeAttribute` 7 | 8 | ## Rule details 9 | 10 | Example of **incorrect** code: 11 | 12 | ```js 13 | import { LightningElement } from 'lwc'; 14 | 15 | class Foo extends LightningElement { 16 | static observedAttributes = ['title']; 17 | } 18 | 19 | class Bar extends LightningElement { 20 | static get observedAttributes() { 21 | return ['title']; 22 | } 23 | } 24 | 25 | class Baz extends LightningElement { 26 | attributeChangedCallback(name, prevValue, nextValue) { 27 | if (name === 'title') { 28 | // ... 29 | } 30 | } 31 | } 32 | ``` 33 | -------------------------------------------------------------------------------- /docs/description/@lwc_lwc_no-inner-html.md: -------------------------------------------------------------------------------- 1 | # Restrict usage of `innerHTML` (no-inner-html) 2 | 3 | Using innerHTML poses a potential security concern and may allow malicious JavaScript to execute. Instead, use `Node.textContent` to set plain text. To interact with DOM nodes, use the native DOM APIs. 4 | 5 | ## Rule details 6 | 7 | Disallow the use of 'innerHTML' in all its forms. This includes `innerHTML`, 8 | `outputHTML`, and `insertAdjacentHTML`. 9 | 10 | Example of **incorrect** code: 11 | 12 | ```js 13 | element.innerHTML = ''; 14 | element.outerHTML = ''; 15 | element.insertAdjacentHTML = ''; 16 | ``` 17 | 18 | Example of **correct** code: 19 | 20 | ```js 21 | element.textContent = 'foo'; 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/description/@lwc_lwc_valid-graphql-wire-adapter-callback-parameters.md: -------------------------------------------------------------------------------- 1 | # Validate graphql wire adapter callback parameter usage (valid-graphql-wire-adapter-callback-parameters) 2 | 3 | The graphql @wire adapter returns `{ data, errors }` instead of `{ data, error }`. Validate that graphql @wire customers are using `errors` not `error`. 4 | 5 | ## Rule details 6 | 7 | Example of **incorrect** code: 8 | 9 | ```js 10 | import { wire } from 'lwc'; 11 | import { gql, graphql } from 'lightning/uiGraphQLApi'; 12 | 13 | class Test { 14 | @wire(graphql, {}) 15 | wiredMethod({ error, data }) {} 16 | } 17 | ``` 18 | 19 | Example of **correct** code: 20 | 21 | ```js 22 | import { wire } from 'lwc'; 23 | import { gql, graphql } from 'lightning/uiGraphQLApi'; 24 | 25 | class Test { 26 | @wire(graphql, {}) 27 | wiredMethod({ errors, data }) {} 28 | } 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/@lwc_lwc_valid-track.md: -------------------------------------------------------------------------------- 1 | # Validate `track` decorator usage (valid-track) 2 | 3 | Apply the `@track` decorator to class fields only. 4 | 5 | ## Rule details 6 | 7 | Example of **incorrect** code: 8 | 9 | ```js 10 | import { track } from 'lwc'; 11 | 12 | @track 13 | class Foo {} 14 | 15 | class Foo { 16 | @track 17 | trackedMethod() {} 18 | } 19 | 20 | class Foo { 21 | @track 22 | set state(value) {} 23 | } 24 | 25 | class Foo { 26 | @track 27 | static state; 28 | } 29 | ``` 30 | 31 | Example of **correct** code: 32 | 33 | ```js 34 | import { track } from 'lwc'; 35 | 36 | class Foo { 37 | @track 38 | state; 39 | } 40 | ``` 41 | -------------------------------------------------------------------------------- /docs/description/@salesforce_aura_getevt-markup-prefix.md: -------------------------------------------------------------------------------- 1 | # Ensure `$A.getEvt` is prefixed with `markup://` (`getevt-markup-prefix`) 2 | 3 | When using `$A.getEvt()`, the prefix to the first parameter should be `markup://`. 4 | 5 | ## Rule Details 6 | 7 | The following pattern is considered an error: 8 | 9 | ```js 10 | $A.getEvt('c:appEvent'); 11 | ``` 12 | 13 | Example of correct code: 14 | 15 | ```js 16 | $A.getEvt('markup://c:appEvent'); 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/description/@salesforce_aura_no-deprecated-aura-error.md: -------------------------------------------------------------------------------- 1 | # Prevent usage of `$A.error` (`no-deprecated-aura-error`) 2 | 3 | The [`$A.error`](https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/ref_jsapi_dollarA_error.htm) is deprecated. Error in Aura components should be reported by throwing a native JavaScript `Error` via `throw new Error()`. 4 | 5 | ## Rule Details 6 | 7 | The following pattern is considered an error: 8 | 9 | ```js 10 | $A.error('Something wrong happened!'); 11 | ``` 12 | 13 | Example of correct code: 14 | 15 | ```js 16 | throw new Error('Something wrong happened!'); 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/description/@salesforce_aura_no-deprecated-component-creation.md: -------------------------------------------------------------------------------- 1 | # Prevent usage of deprecated component creation methods (`no-deprecated-component-creation`) 2 | 3 | All the component creation APIs outside `$A.createComponent` are deprecated. 4 | 5 | ## Rule Details 6 | 7 | The following pattern is considered an error: 8 | 9 | ```js 10 | $A.newCmp('ui:button'); 11 | ``` 12 | 13 | Example of correct code: 14 | 15 | ```js 16 | $A.createComponent('ui:button', params, callback); 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/description/@salesforce_aura_no-deprecated-event-creation.md: -------------------------------------------------------------------------------- 1 | # Prevent usage of deprecated event creation methods (`no-deprecated-event-creation`) 2 | 3 | ## Rule Details 4 | 5 | The following pattern is considered an error: 6 | 7 | ```js 8 | $A.get('e.ns:something'); 9 | ``` 10 | 11 | Example of correct code: 12 | 13 | ```js 14 | $A.get('e.something'); 15 | $A.get('e:something'); 16 | ``` 17 | -------------------------------------------------------------------------------- /docs/description/@salesforce_lightning_no-moment.md: -------------------------------------------------------------------------------- 1 | # Prevent usage of the `moment` library (no-moment) 2 | 3 | The use of `moment` library is not recommended because it has bad performance and is large in size. 4 | 5 | You should be using the `@salesforce/i18n-service` methods instead. 6 | 7 | Usage of following `moment` imports are detected: 8 | 9 | - `require('moment');` 10 | - `import moment from 'moment';` 11 | 12 | ## Rule details 13 | 14 | Example of **incorrect** code: 15 | 16 | ```js 17 | var moment = require('moment'); 18 | 19 | // OR 20 | 21 | import moment from 'moment'; 22 | ``` 23 | 24 | Example of **correct** code: 25 | 26 | ```js 27 | import { getDateTimeFormat, getNumberFormat } from '@salesforce/i18n-service'; 28 | ``` 29 | -------------------------------------------------------------------------------- /docs/description/@shopify_prefer-twine.md: -------------------------------------------------------------------------------- 1 | # Prefer Twine over Bindings as the name for twine imports. (prefer-twine) 2 | 3 | Twine has historically been referred to by the globals `Twine` and `Bindings`. In order to improve clarity and consistency, we will be using `Twine` exclusively going forward. 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```js 10 | import Bindings from 'twine'; 11 | import tw from 'twine'; 12 | ``` 13 | 14 | The following patterns are not warnings: 15 | 16 | ```js 17 | import Twine from 'twine'; 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/description/@shopify_react-type-state.md: -------------------------------------------------------------------------------- 1 | # Require that React component state be typed in TypeScript. (react-type-state) 2 | 3 | TypeScript will not correctly check your state instance property against the state declared in the component’s type initialization unless an explicit type annotation is provided. This rule enforces that the type annotation is provided when it detects a meaningful state type in a TypeScript React component. 4 | 5 | ## Rule Details 6 | 7 | The following pattern is considered a warning: 8 | 9 | ```ts 10 | class MyComponent extends React.Component<{}, State> { 11 | state = {}; 12 | } 13 | ``` 14 | 15 | The following patterns are not warnings: 16 | 17 | ```ts 18 | class MyComponent extends React.Component {} 19 | class MyComponent extends React.Component { 20 | state: State = {}; 21 | } 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/description/@stylistic_func-call-spacing.md: -------------------------------------------------------------------------------- 1 | # js/func-call-spacing 2 | 3 | This rule is renamed to [`function-call-spacing`](https://github.com/eslint-stylistic/eslint-stylistic/tree/main/function-call-spacing) 4 | -------------------------------------------------------------------------------- /docs/description/@stylistic_type-generic-spacing.md: -------------------------------------------------------------------------------- 1 | # plus/type-generic-spacing 2 | 3 | Enforces consistent spacing inside TypeScript type generics. 4 | 5 | ## Rule Details 6 | 7 | This rule enforces consistent spacing inside TypeScript type generics. 8 | 9 | ## Options 10 | 11 | This rule has no options. 12 | 13 | Examples of **incorrect** code for this rule: 14 | 15 | :::incorrect 16 | 17 | ```ts 18 | /*eslint type-generic-spacing: ["error"]*/ 19 | 20 | type Foo = T 21 | type Foo = T 22 | 23 | interface Log { 24 | foo (name: T): void 25 | } 26 | ``` 27 | 28 | ::: 29 | 30 | Examples of **correct** code for this rule: 31 | 32 | :::correct 33 | 34 | ```ts 35 | /*eslint type-generic-spacing: ["error"]*/ 36 | 37 | type Foo = T 38 | type Foo = T 39 | 40 | interface Log { 41 | foo(name: T): void 42 | } 43 | ``` 44 | 45 | ::: 46 | -------------------------------------------------------------------------------- /docs/description/@stylistic_type-named-tuple-spacing.md: -------------------------------------------------------------------------------- 1 | # plus/type-named-tuple-spacing 2 | 3 | Expect space before the type declaration in the named tuple. 4 | 5 | ## Rule Details 6 | 7 | Expect space before the type declaration in the named tuple. 8 | 9 | ## Options 10 | 11 | This rule has no options. 12 | 13 | Examples of **incorrect** code for this rule: 14 | 15 | :::incorrect 16 | 17 | ```ts 18 | /*eslint type-named-tuple-spacing: ["error"]*/ 19 | 20 | type T = [i:number] 21 | type T = [i? :number] 22 | type T = [i:()=>void, j:number] 23 | ``` 24 | 25 | ::: 26 | 27 | Examples of **correct** code for this rule: 28 | 29 | :::correct 30 | 31 | ```ts 32 | /*eslint type-named-tuple-spacing: ["error"]*/ 33 | 34 | type T = [i: number] 35 | type T = [i?: number] 36 | type T = [i: ()=>void, j: number] 37 | ``` 38 | 39 | ::: 40 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_block-spacing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow or enforce spaces inside of blocks after opening block and before closing block.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/block-spacing** for documentation. 8 | 9 | This rule extends the base [`eslint/block-spacing`](https://eslint.org/docs/rules/block-spacing) rule. 10 | This version adds support for TypeScript related blocks (interfaces, object type literals and enums). 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_comma-spacing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce consistent spacing before and after commas.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/comma-spacing** for documentation. 8 | 9 | This rule extends the base [`eslint/comma-spacing`](https://eslint.org/docs/rules/comma-spacing) rule. 10 | It adds support for trailing comma in a types parameters list. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_func-call-spacing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Require or disallow spacing between function identifiers and their invocations.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/func-call-spacing** for documentation. 8 | 9 | This rule extends the base [`eslint/func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing) rule. 10 | It adds support for generic type parameters on function calls. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_init-declarations.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Require or disallow initialization in variable declarations.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/init-declarations** for documentation. 8 | 9 | This rule extends the base [`eslint/init-declarations`](https://eslint.org/docs/rules/init-declarations) rule. 10 | It adds support for TypeScript's `declare` variables. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_key-spacing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce consistent spacing between property names and type annotations in types and interfaces.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/key-spacing** for documentation. 8 | 9 | This rule extends the base [`eslint/key-spacing`](https://eslint.org/docs/rules/key-spacing) rule. 10 | It adds support for type annotations on interfaces, classes and type literals properties. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_keyword-spacing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce consistent spacing before and after keywords.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/keyword-spacing** for documentation. 8 | 9 | This rule extends the base [`eslint/keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing) rule. 10 | It adds support for generic type parameters on function calls. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_max-params.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce a maximum number of parameters in function definitions.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/max-params** for documentation. 8 | 9 | This rule extends the base [`eslint/max-params`](https://eslint.org/docs/rules/max-params) rule. 10 | This version adds support for TypeScript `this` parameters so they won't be counted as a parameter. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_no-array-constructor.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow generic `Array` constructors.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/no-array-constructor** for documentation. 8 | 9 | This rule extends the base [`eslint/no-array-constructor`](https://eslint.org/docs/rules/no-array-constructor) rule. 10 | It adds support for the generically typed `Array` constructor (`new Array()`). 11 | 12 | 13 | 14 | #### ❌ Incorrect 15 | 16 | ```ts 17 | Array(0, 1, 2); 18 | new Array(0, 1, 2); 19 | ``` 20 | 21 | #### ✅ Correct 22 | 23 | ```ts 24 | Array(0, 1, 2); 25 | new Array(x, y, z); 26 | 27 | Array(500); 28 | new Array(someOtherArray.length); 29 | ``` 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_no-dupe-class-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow duplicate class members.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/no-dupe-class-members** for documentation. 8 | 9 | 10 | 11 | This rule extends the base [`eslint/no-dupe-class-members`](https://eslint.org/docs/rules/no-dupe-class-members) rule. 12 | It adds support for TypeScript's method overload definitions. 13 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_no-extra-parens.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow unnecessary parentheses.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/no-extra-parens** for documentation. 8 | 9 | This rule extends the base [`eslint/no-extra-parens`](https://eslint.org/docs/rules/no-extra-parens) rule. 10 | It adds support for TypeScript type assertions. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_no-invalid-this.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow `this` keywords outside of classes or class-like objects.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/no-invalid-this** for documentation. 8 | 9 | 10 | 11 | This rule extends the base [`eslint/no-invalid-this`](https://eslint.org/docs/rules/no-invalid-this) rule. 12 | It adds support for TypeScript's `this` parameters. 13 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_no-loop-func.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow function declarations that contain unsafe references inside loop statements.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/no-loop-func** for documentation. 8 | 9 | This rule extends the base [`eslint/no-loop-func`](https://eslint.org/docs/rules/no-loop-func) rule. 10 | It adds support for TypeScript types. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_no-loss-of-precision.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow literal numbers that lose precision.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/no-loss-of-precision** for documentation. 8 | 9 | This rule extends the base [`eslint/no-loss-of-precision`](https://eslint.org/docs/rules/no-loss-of-precision) rule. 10 | It adds support for [numeric separators](https://github.com/tc39/proposal-numeric-separator). 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_object-curly-spacing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce consistent spacing inside braces.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/object-curly-spacing** for documentation. 8 | 9 | This rule extends the base [`eslint/object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing) rule. 10 | It adds support for TypeScript's object types. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_quotes.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce the consistent use of either backticks, double, or single quotes.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/quotes** for documentation. 8 | 9 | This rule extends the base [`eslint/quotes`](https://eslint.org/docs/rules/quotes) rule. 10 | It adds support for TypeScript features which allow quoted names, but not backtick quoted names. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_require-await.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Disallow async functions which do not return promises and have no `await` expression.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/require-await** for documentation. 8 | 9 | This rule extends the base [`eslint/require-await`](https://eslint.org/docs/rules/require-await) rule. 10 | It uses type information to allow promise-returning functions to be marked as `async` without containing an `await` expression. 11 | 12 | ## Examples 13 | 14 | Examples of **correct** code for this rule: 15 | 16 | ```ts 17 | async function returnsPromise1() { 18 | return Promise.resolve(1); 19 | } 20 | 21 | const returnsPromise2 = () => returnsPromise1(); 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_semi.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Require or disallow semicolons instead of ASI.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/semi** for documentation. 8 | 9 | This rule extends the base [`eslint/semi`](https://eslint.org/docs/rules/semi) rule. 10 | It adds support for TypeScript features that require semicolons. 11 | 12 | See also the [`@typescript-eslint/member-delimiter-style`](member-delimiter-style.mdx) rule, which allows you to specify the delimiter for `type` and `interface` members. 13 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_space-before-function-paren.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Enforce consistent spacing before function parenthesis.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/space-before-function-paren** for documentation. 8 | 9 | This rule extends the base [`eslint/space-before-function-paren`](https://eslint.org/docs/rules/space-before-function-paren) rule. 10 | It adds support for generic type parameters on function calls. 11 | -------------------------------------------------------------------------------- /docs/description/@typescript-eslint_space-infix-ops.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Require spacing around infix operators.' 3 | --- 4 | 5 | > 🛑 This file is source code, not the primary documentation location! 🛑 6 | > 7 | > See **https://typescript-eslint.io/rules/space-infix-ops** for documentation. 8 | 9 | This rule extends the base [`eslint/space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops) rule. 10 | It adds support for enum members. 11 | 12 | ```ts 13 | enum MyEnum { 14 | KEY = 'value', 15 | } 16 | ``` 17 | -------------------------------------------------------------------------------- /docs/description/ava_no-skip-assert.md: -------------------------------------------------------------------------------- 1 | # Ensure no assertions are skipped (`ava/no-skip-assert`) 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/avajs/eslint-plugin-ava#recommended-config). 4 | 5 | 6 | 7 | Translations: [Français](https://github.com/avajs/ava-docs/blob/main/fr_FR/related/eslint-plugin-ava/docs/rules/no-skip-assert.md) 8 | 9 | It's easy to make an assertion skipped with `t.skip.xyz()` and then forget about it. 10 | 11 | ## Fail 12 | 13 | ```js 14 | const test = require('ava'); 15 | 16 | test('some title', t => { 17 | t.skip.is(1, 1); 18 | }); 19 | ``` 20 | 21 | ## Pass 22 | 23 | ```js 24 | const test = require('ava'); 25 | 26 | test('some title', t => { 27 | t.is(1, 1); 28 | }); 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/ava_no-todo-test.md: -------------------------------------------------------------------------------- 1 | # Ensure no `test.todo()` is used (`ava/no-todo-test`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` [config](https://github.com/avajs/eslint-plugin-ava#recommended-config). 4 | 5 | 6 | 7 | Translations: [Français](https://github.com/avajs/ava-docs/blob/main/fr_FR/related/eslint-plugin-ava/docs/rules/no-todo-test.md) 8 | 9 | Disallow the use of `test.todo()`. You might want to do this to only ship features with specs fully written and passing. 10 | 11 | ## Fail 12 | 13 | ```js 14 | const test = require('ava'); 15 | 16 | test.todo('some test'); 17 | ``` 18 | 19 | ## Pass 20 | 21 | ```js 22 | const test = require('ava'); 23 | 24 | test('some test', t => { 25 | // Some implementation 26 | }); 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/description/ava_test-title.md: -------------------------------------------------------------------------------- 1 | # Ensure tests have a title (`ava/test-title`) 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/avajs/eslint-plugin-ava#recommended-config). 4 | 5 | 6 | 7 | Translations: [Français](https://github.com/avajs/ava-docs/blob/main/fr_FR/related/eslint-plugin-ava/docs/rules/test-title.md) 8 | 9 | Tests should have a title. AVA [v1.0.1](https://github.com/avajs/ava/releases/tag/v1.0.1) and later enforces this at runtime. 10 | 11 | ## Fail 12 | 13 | ```js 14 | const test = require('ava'); 15 | 16 | test(t => { 17 | t.pass(); 18 | }); 19 | ``` 20 | 21 | ## Pass 22 | 23 | ```js 24 | const test = require('ava'); 25 | 26 | test('foo', t => { 27 | t.pass(); 28 | }); 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/backbone_no-changed-set.md: -------------------------------------------------------------------------------- 1 | # Prevent setting changed attribute of the model in views (no-changed-set) 2 | 3 | Changed attribute is automatically computed by Backbone and modified when any property of the model has been updated. Manually changing it can lead to problems. 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```js 10 | 11 | Backbone.View.extend({ 12 | render: function() { 13 | this.model.changed = false; 14 | } 15 | }); 16 | 17 | ``` 18 | 19 | The following patterns are not warnings: 20 | 21 | ```js 22 | 23 | Backbone.View.extend({ 24 | render: function() { 25 | if (this.model.changed) { 26 | ... 27 | } 28 | } 29 | }); 30 | 31 | ``` 32 | 33 | ## Further Reading 34 | 35 | [BackboneJS Documentation](http://backbonejs.org/#Model-changed) 36 | -------------------------------------------------------------------------------- /docs/description/backbone_no-view-collection-models.md: -------------------------------------------------------------------------------- 1 | # Prevent access to collection's models property inside views (no-view-collection-models) 2 | 3 | Instead of accessing `models` collection directly from within views, use `get()`, `at()` or underscore functions. 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```js 10 | 11 | Backbone.View.extend({ 12 | render: function() { 13 | alert(this.model.models.length); 14 | } 15 | }) 16 | 17 | ``` 18 | 19 | The following patterns are not warnings: 20 | 21 | ```js 22 | 23 | Backbone.View.extend({ 24 | render: function() { 25 | alert(this.collection.at(0)); 26 | } 27 | }); 28 | 29 | ``` 30 | 31 | ## Further Reading 32 | 33 | [BackboneJS Documentation](http://backbonejs.org/#Collection-models) 34 | -------------------------------------------------------------------------------- /docs/description/backbone_render-return.md: -------------------------------------------------------------------------------- 1 | # Enforces render function to always return this (render-return) 2 | 3 | Returning `this` from within `render` function is considered best practice in Backbone. 4 | 5 | 6 | ## Rule Details 7 | 8 | The following patterns are considered warnings: 9 | 10 | ```js 11 | 12 | Backbone.View.extend({ 13 | render: function() { 14 | 15 | } 16 | }); 17 | 18 | ``` 19 | 20 | The following patterns are not warnings: 21 | 22 | ```js 23 | 24 | Backbone.View.extend({ 25 | render: function() { 26 | return this; 27 | } 28 | }); 29 | 30 | ``` 31 | 32 | ## Further Reading 33 | 34 | [BackboneJS Documentation](http://backbonejs.org/#View-render) 35 | -------------------------------------------------------------------------------- /docs/description/compat_compat.md: -------------------------------------------------------------------------------- 1 | # compat/compat 2 | 3 | This rule enables linting your code for browser compatibility. 4 | 5 | ## This will be reported 6 | 7 | ```js 8 | // Targeting IE 9 | fetch('https://exmaple.com'); 10 | ``` 11 | 12 | ## This will not be reported 13 | 14 | ```js 15 | // Using default browser targets 16 | fetch('https://exmaple.com'); 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/description/cypress_no-assigning-return-values.md: -------------------------------------------------------------------------------- 1 | # Disallow assigning return values of `cy` calls (`cypress/no-assigning-return-values`) 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` config. 4 | 5 | 6 | ## Further Reading 7 | 8 | See [the Cypress Best Practices guide](https://on.cypress.io/best-practices#Assigning-Return-Values). 9 | -------------------------------------------------------------------------------- /docs/description/cypress_no-debug.md: -------------------------------------------------------------------------------- 1 | # Disallow using `cy.debug()` calls (`cypress/no-debug`) 2 | 3 | 4 | It is recommended to remove any [cy.debug](https://on.cypress.io/debug) commands before committing specs to avoid other developers getting unexpected results. 5 | 6 | ## Rule Details 7 | 8 | Examples of **incorrect** code for this rule: 9 | 10 | ```js 11 | cy.debug(); 12 | cy.get('selector').debug(); 13 | ``` 14 | 15 | Examples of **correct** code for this rule: 16 | 17 | ```js 18 | cy.get('selector') 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/description/cypress_no-pause.md: -------------------------------------------------------------------------------- 1 | # Disallow using `cy.pause()` calls (`cypress/no-pause`) 2 | 3 | 4 | It is recommended to remove any [cy.pause](https://on.cypress.io/pause) commands before committing specs to avoid other developers getting unexpected results. 5 | 6 | ## Rule Details 7 | 8 | Examples of **incorrect** code for this rule: 9 | 10 | ```js 11 | cy.pause(); 12 | cy.get('selector').pause(); 13 | ``` 14 | 15 | Examples of **correct** code for this rule: 16 | 17 | ```js 18 | cy.get('selector') 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/description/cypress_no-unnecessary-waiting.md: -------------------------------------------------------------------------------- 1 | # Disallow waiting for arbitrary time periods (`cypress/no-unnecessary-waiting`) 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` config. 4 | 5 | 6 | ## Further Reading 7 | 8 | See [the Cypress Best Practices guide](https://on.cypress.io/best-practices#Unnecessary-Waiting). 9 | -------------------------------------------------------------------------------- /docs/description/cypress_unsafe-to-chain-command.md: -------------------------------------------------------------------------------- 1 | # Disallow actions within chains (`cypress/unsafe-to-chain-command`) 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` config. 4 | 5 | 6 | ### Options 7 | 8 | 9 | 10 | | Name | Description | Type | Default | 11 | | :-------- | :---------------------------------------------------------- | :---- | :------ | 12 | | `methods` | An additional list of methods to check for unsafe chaining. | Array | `[]` | 13 | 14 | 15 | 16 | ## Further Reading 17 | 18 | See [retry-ability guide](https://docs.cypress.io/guides/core-concepts/retry-ability#Actions-should-be-at-the-end-of-chains-not-the-middle). 19 | -------------------------------------------------------------------------------- /docs/description/ember_no-on-calls-in-components.md: -------------------------------------------------------------------------------- 1 | # ember/no-on-calls-in-components 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/ember-cli/eslint-plugin-ember#-configurations). 4 | 5 | 6 | 7 | Prevents using `.on()` in favour of component's lifecycle hooks. 8 | 9 | The order of execution for `on()` is not deterministic. 10 | 11 | ## Examples 12 | 13 | Examples of **incorrect** code for this rule: 14 | 15 | ```js 16 | export default Component.extend({ 17 | abc: on('didInsertElement', function () { 18 | /* custom logic */ 19 | }) 20 | }); 21 | ``` 22 | 23 | Examples of **correct** code for this rule: 24 | 25 | ```js 26 | export default Component.extend({ 27 | didInsertElement() { 28 | /* custom logic */ 29 | } 30 | }); 31 | ``` 32 | -------------------------------------------------------------------------------- /docs/description/ember_use-brace-expansion.md: -------------------------------------------------------------------------------- 1 | # ember/use-brace-expansion 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/ember-cli/eslint-plugin-ember#-configurations). 4 | 5 | 6 | 7 | This allows much less redundancy and is easier to read. 8 | 9 | Note that **the dependent keys must be together (without space)** for the brace expansion to work. 10 | 11 | ## Examples 12 | 13 | Examples of **incorrect** code for this rule: 14 | 15 | ```js 16 | export default Component.extend({ 17 | fullName: computed('user.firstName', 'user.lastName', { 18 | // Code 19 | }) 20 | }); 21 | ``` 22 | 23 | Examples of **correct** code for this rule: 24 | 25 | ```js 26 | export default Component.extend({ 27 | fullName: computed('user.{firstName,lastName}', { 28 | // Code 29 | }) 30 | }); 31 | ``` 32 | -------------------------------------------------------------------------------- /docs/description/flowtype_arrow-parens.md: -------------------------------------------------------------------------------- 1 | ### `arrow-parens` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces the consistent use of parentheses in arrow functions. 6 | 7 | This rule has a string option and an object one. 8 | 9 | String options are: 10 | 11 | - `"always"` (default) requires parens around arguments in all cases. 12 | - `"as-needed"` enforces no braces where they can be omitted. 13 | 14 | Object properties for variants of the `"as-needed"` option: 15 | 16 | - `"requireForBlockBody": true` modifies the as-needed rule in order to require parens if the function body is in an instructions block (surrounded by braces). 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/description/flowtype_boolean-style.md: -------------------------------------------------------------------------------- 1 | ### `boolean-style` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces a particular style for boolean type annotations. This rule takes one argument. 6 | 7 | If it is `'boolean'` then a problem is raised when using `bool` instead of `boolean`. 8 | 9 | If it is `'bool'` then a problem is raised when using `boolean` instead of `bool`. 10 | 11 | The default value is `'boolean'`. 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/description/flowtype_define-flow-type.md: -------------------------------------------------------------------------------- 1 | ### `define-flow-type` 2 | 3 | Marks Flow type identifiers as defined. 4 | 5 | Used to suppress [`no-undef`](http://eslint.org/docs/rules/no-undef) reporting of type identifiers. 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/description/flowtype_enforce-line-break.md: -------------------------------------------------------------------------------- 1 | ### `enforce-line-break` 2 | 3 | This rule enforces line breaks between type definitions. 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/description/flowtype_generic-spacing.md: -------------------------------------------------------------------------------- 1 | ### `generic-spacing` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces consistent spacing within generic type annotation parameters. 6 | 7 | This rule takes one argument. If it is `'never'` then a problem is raised when there is a space surrounding the generic type parameters. If it is `'always'` then a problem is raised when there is no space surrounding the generic type parameters. 8 | 9 | The default value is `'never'`. 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/description/flowtype_interface-id-match.md: -------------------------------------------------------------------------------- 1 | ### `interface-id-match` 2 | 3 | Enforces a consistent naming pattern for interfaces. 4 | 5 | #### Options 6 | 7 | This rule requires a text RegExp: 8 | 9 | ```js 10 | { 11 | "rules": { 12 | "flowtype/interface-id-match": [ 13 | 2, 14 | "^([A-Z][a-z0-9]*)+Type$" 15 | ] 16 | } 17 | } 18 | ``` 19 | 20 | `'^([A-Z][a-z0-9]*)+Type$$'` is the default pattern. 21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/description/flowtype_newline-after-flow-annotation.md: -------------------------------------------------------------------------------- 1 | ### `newline-after-flow-annotation` 2 | 3 | This rule requires an empty line after the Flow annotation. 4 | 5 | #### Options 6 | 7 | The rule has a string option: 8 | 9 | * `"always"` (default): Enforces that `@flow` annotations be followed by an empty line, separated by newline (LF) 10 | * `"always-windows"`: Identical to "always", but will use a CRLF when autofixing 11 | * `"never"`: Enforces that `@flow` annotations are not followed by empty lines 12 | 13 | ```js 14 | { 15 | "rules": { 16 | "flowtype/newline-after-flow-annotation": [ 17 | 2, 18 | "always" 19 | ] 20 | } 21 | } 22 | ``` 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-dupe-keys.md: -------------------------------------------------------------------------------- 1 | ### `no-dupe-keys` 2 | 3 | Checks for duplicate properties in Object annotations. 4 | 5 | This rule mirrors ESLint's [no-dupe-keys](http://eslint.org/docs/rules/no-dupe-keys) rule. 6 | 7 | ```js 8 | { 9 | "rules": { 10 | "flowtype/no-dupe-keys": 2 11 | } 12 | } 13 | ``` 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-existential-type.md: -------------------------------------------------------------------------------- 1 | ### `no-existential-type` 2 | 3 | Disallows use of the existential type (*). [See more](https://flow.org/en/docs/types/utilities/#toc-existential-type) 4 | 5 | ```js 6 | { 7 | "rules": { 8 | "flowtype/no-existential-type": 2 9 | } 10 | } 11 | ``` 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-flow-fix-me-comments.md: -------------------------------------------------------------------------------- 1 | ### `no-flow-fix-me-comments` 2 | 3 | Disallows `$FlowFixMe` comment suppressions. 4 | 5 | This is especially useful as a warning to ensure instances of `$FlowFixMe` in your codebase get fixed over time. 6 | 7 | #### Options 8 | 9 | This rule takes an optional RegExp that comments a text RegExp that makes the supression valid. 10 | 11 | ```js 12 | { 13 | "rules": { 14 | "flowtype/no-flow-fix-me-comments": [ 15 | 1, 16 | "TODO\s+[0-9]+" 17 | ] 18 | } 19 | } 20 | ``` 21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-internal-flow-type.md: -------------------------------------------------------------------------------- 1 | ### `no-internal-flow-type` 2 | 3 | Warns against using internal Flow types such as `React$Node`, `React$Ref` and others and suggests using public alternatives instead (`React.Node`, `React.Ref`, …). 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-mixed.md: -------------------------------------------------------------------------------- 1 | ### `no-mixed` 2 | 3 | Warns against "mixed" type annotations. 4 | These types are not strict enough and could often be made more specific. 5 | 6 | The following patterns are considered problems: 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-primitive-constructor-types.md: -------------------------------------------------------------------------------- 1 | ### `no-primitive-constructor-types` 2 | 3 | Disallows use of primitive constructors as types, such as `Boolean`, `Number` and `String`. [See more](https://flowtype.org/docs/builtins.html). 4 | 5 | ```js 6 | { 7 | "rules": { 8 | "flowtype/no-primitive-constructor-types": 2 9 | } 10 | } 11 | ``` 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/description/flowtype_no-types-missing-file-annotation.md: -------------------------------------------------------------------------------- 1 | ### `no-types-missing-file-annotation` 2 | 3 | Disallows Flow type imports, aliases, and annotations in files missing a valid Flow file declaration (or a @noflow annotation). 4 | 5 | ```js 6 | { 7 | "rules": { 8 | "flowtype/no-types-missing-file-annotation": 2 9 | } 10 | } 11 | ``` 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/description/flowtype_object-type-curly-spacing.md: -------------------------------------------------------------------------------- 1 | ### `object-type-curly-spacing` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | This rule enforces consistent spacing inside braces of object types. 6 | 7 | #### Options 8 | 9 | The rule has a string option: 10 | 11 | * `"never"` (default): disallows spacing inside of braces. 12 | * `"always"`: requires spacing inside of braces. 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/description/flowtype_object-type-delimiter.md: -------------------------------------------------------------------------------- 1 | ### `object-type-delimiter` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces consistent separators between properties in Flow object types. 6 | 7 | This rule takes one argument. 8 | 9 | If it is `'comma'` then a problem is raised when using `;` as a separator. 10 | 11 | If it is `'semicolon'` then a problem is raised when using `,` as a separator. 12 | 13 | The default value is `'comma'`. 14 | 15 | _This rule is ported from `babel/flow-object-type`, however the default option was changed._ 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/description/flowtype_quotes.md: -------------------------------------------------------------------------------- 1 | ### `quotes` 2 | 3 | Enforces single quotes or double quotes around string literals. 4 | 5 | #### Options 6 | 7 | The rule has string options of: 8 | 9 | * `"double"` (default) requires double quotes around string literals. 10 | * `"single"` requires single quotes around string literals. 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/description/flowtype_require-exact-type.md: -------------------------------------------------------------------------------- 1 | ### `require-exact-type` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | This rule enforces [exact object types](https://flow.org/en/docs/types/objects/#toc-exact-object-types). 6 | 7 | #### Options 8 | 9 | The rule has one string option: 10 | 11 | * `"always"` (default): Report all object type definitions that aren't exact. 12 | * `"never"`: Report all object type definitions that are exact. 13 | 14 | ```js 15 | { 16 | "rules": { 17 | "flowtype/require-exact-type": [ 18 | 2, 19 | "always" 20 | ] 21 | } 22 | } 23 | 24 | { 25 | "rules": { 26 | "flowtype/require-exact-type": [ 27 | 2, 28 | "never" 29 | ] 30 | } 31 | } 32 | ``` 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/description/flowtype_require-indexer-name.md: -------------------------------------------------------------------------------- 1 | ### `require-indexer-name` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | This rule validates Flow object indexer name. 6 | 7 | #### Options 8 | 9 | The rule has a string option: 10 | 11 | * `"never"` (default): Never report files that are missing an indexer key name. 12 | * `"always"`: Always report files that are missing an indexer key name. 13 | 14 | ```js 15 | { 16 | "rules": { 17 | "flowtype/require-indexer-name": [ 18 | 2, 19 | "always" 20 | ] 21 | } 22 | } 23 | ``` 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/description/flowtype_require-inexact-type.md: -------------------------------------------------------------------------------- 1 | ### `require-inexact-type` 2 | 3 | This rule enforces explicit inexact object types. 4 | 5 | #### Options 6 | 7 | The rule has one string option: 8 | 9 | - `"always"` (default): Report all object type definitions that aren't explicit inexact, but ignore exact objects. 10 | - `"never"`: Report all object type definitions that are explicit inexact. 11 | 12 | ```js 13 | { 14 | "rules": { 15 | "flowtype/require-inexact-type": [ 16 | 2, 17 | "always" 18 | ] 19 | } 20 | } 21 | 22 | { 23 | "rules": { 24 | "flowtype/require-inexact-type": [ 25 | 2, 26 | "never" 27 | ] 28 | } 29 | } 30 | ``` 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/description/flowtype_require-types-at-top.md: -------------------------------------------------------------------------------- 1 | ### `require-types-at-top` 2 | 3 | Requires all type declarations to be at the top of the file, after any import declarations. 4 | 5 | #### Options 6 | 7 | The rule has a string option: 8 | 9 | * `"never"` 10 | * `"always"` 11 | 12 | The default value is `"always"`. 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/description/flowtype_semi.md: -------------------------------------------------------------------------------- 1 | ### `semi` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces consistent use of semicolons after type aliases. 6 | 7 | This rule takes one argument. If it is `'never'` then a problem is raised when there is a semicolon after a type alias. If it is `'always'` then a problem is raised when there is no semicolon after a type alias. 8 | 9 | The default value is `'always'`. 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/description/flowtype_sort-keys.md: -------------------------------------------------------------------------------- 1 | ### `sort-keys` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces natural, case-insensitive sorting of Object annotations. 6 | 7 | #### Options 8 | 9 | The first option specifies sort order. 10 | 11 | * `"asc"` (default) - enforce ascending sort order. 12 | * `"desc"` - enforce descending sort order. 13 | 14 | ```js 15 | { 16 | "rules": { 17 | "flowtype/sort-keys": [ 18 | 2, 19 | "asc" 20 | ] 21 | } 22 | } 23 | ``` 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/description/flowtype_space-before-generic-bracket.md: -------------------------------------------------------------------------------- 1 | ### `space-before-generic-bracket` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces consistent spacing before the opening `<` of generic type annotation parameters. 6 | 7 | This rule takes one argument. If it is `'never'` then a problem is raised when there is a space before the `<`. If it is `'always'` then a problem is raised when there is no space before the `<`. 8 | 9 | The default value is `'never'`. 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/description/flowtype_space-before-type-colon.md: -------------------------------------------------------------------------------- 1 | ### `space-before-type-colon` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces consistent spacing before the type annotation colon. 6 | 7 | This rule takes one argument. If it is `'always'` then a problem is raised when there is no space before the type annotation colon. If it is `'never'` then a problem is raised when there is a space before the type annotation colon. The default value is `'never'`. 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/description/flowtype_spread-exact-type.md: -------------------------------------------------------------------------------- 1 | ### `spread-exact-type` 2 | 3 | Enforce object types, that are spread to be exact type explicitly. 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/description/flowtype_type-id-match.md: -------------------------------------------------------------------------------- 1 | ### `type-id-match` 2 | 3 | Enforces a consistent naming pattern for type aliases. 4 | 5 | #### Options 6 | 7 | This rule requires a text RegExp: 8 | 9 | ```js 10 | { 11 | "rules": { 12 | "flowtype/type-id-match": [ 13 | 2, 14 | "^([A-Z][a-z0-9]*)+Type$" 15 | ] 16 | } 17 | } 18 | ``` 19 | 20 | `'^([A-Z][a-z0-9]*)+Type$$'` is the default pattern. 21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/description/flowtype_type-import-style.md: -------------------------------------------------------------------------------- 1 | ### `type-import-style` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces a particular style for type imports: 6 | 7 | ``` 8 | // 'identifier' style 9 | import {type T, type U, type V} from '...'; 10 | 11 | // 'declaration' style 12 | import type {T, U, V} from '...'; 13 | ``` 14 | 15 | #### Options 16 | 17 | The rule has a string option: 18 | 19 | * `"identifier"` (default): Enforces that type imports are all in the 20 | 'identifier' style. 21 | * `"declaration"`: Enforces that type imports are all in the 'declaration' 22 | style. 23 | 24 | This rule has an object option: 25 | 26 | * `ignoreTypeDefault` - if `true`, when in "identifier" mode, default type imports will be ignored. Default is `false`. 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/description/flowtype_union-intersection-spacing.md: -------------------------------------------------------------------------------- 1 | ### `union-intersection-spacing` 2 | 3 | _The `--fix` option on the command line automatically fixes problems reported by this rule._ 4 | 5 | Enforces consistent spacing around union and intersection type separators (`|` and `&`). 6 | 7 | This rule takes one argument. If it is `'always'` then a problem is raised when there is no space around the separator. If it is `'never'` then a problem is raised when there is a space around the separator. 8 | 9 | The default value is `'always'`. 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/description/flowtype_use-flow-type.md: -------------------------------------------------------------------------------- 1 | ### `use-flow-type` 2 | 3 | Marks Flow [type alias](https://flowtype.org/docs/type-aliases.html) declarations as used. 4 | 5 | Used to suppress [`no-unused-vars`](http://eslint.org/docs/rules/no-unused-vars) errors that are triggered by type aliases. 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/description/flowtype_valid-syntax.md: -------------------------------------------------------------------------------- 1 | ### `valid-syntax` 2 | 3 | **Deprecated** Babylon (the Babel parser) v6.10.0 fixes parsing of the invalid syntax this plugin warned against. 4 | 5 | Checks for simple Flow syntax errors. 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/description/fp_no-class.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of `class` 2 | 3 | Classes are nice tools to use when programming with the object-oriented paradigm, as they hold internal state and give access to methods on the instances. In functional programming, having stateful objects is more harmful than helpful, and should be replaced by the use of pure functions. 4 | 5 | ### Fail 6 | 7 | ```js 8 | class Polygon { 9 | constructor(height, width) { 10 | this.height = height; 11 | this.width = width; 12 | } 13 | } 14 | ``` 15 | 16 | ### Pass 17 | 18 | ```js 19 | function polygon(height, width) { 20 | return { 21 | height: height, 22 | width: width 23 | }; 24 | } 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/fp_no-delete.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of `delete` 2 | 3 | `delete` is an operator to remove fields from an object or elements from an array. This purposely mutates data, which is not wanted when doing functional programming. 4 | 5 | ### Fail 6 | 7 | ```js 8 | delete foo; 9 | delete foo.bar; 10 | delete foo[bar]; 11 | ``` 12 | 13 | ### Pass 14 | 15 | ```js 16 | var _ = require('lodash/fp'); 17 | 18 | var fooWithoutBar = _.omit('bar', foo); 19 | var fooWithoutField = _.omit(bar, foo); 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/description/fp_no-events.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of the `events` module 2 | 3 | The use of `EventEmitter` with the `events` module provided by Node.js promotes implicit side-effects by emitting and listening to events. Instead of `events`, you should prefer activating the wanted effects by calling the functions you wish to use explicitly. 4 | 5 | The rule will simply warn whenever the `events` module is imported. 6 | 7 | ### Fail 8 | 9 | ```js 10 | import EventEmitter from 'events'; 11 | 12 | const EventEmitter = require('events') 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/description/fp_no-let.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of `let` 2 | 3 | If you want to program as if your variables are immutable, part of the answer is to not allow your variables to be reassigned. By not allowing the use of `let` and `var`, variables that you declared may not be reassigned. 4 | 5 | This rule does not forbid the use the use of `var`, but you should forbid that by turning on the [`no-var` core rule](http://eslint.org/docs/rules/no-var). 6 | 7 | ### Fail 8 | 9 | ```js 10 | let a = 1; 11 | let b = 2, 12 | c = 3; 13 | let d; 14 | ``` 15 | 16 | ### Pass 17 | 18 | ```js 19 | const a = 1; 20 | const b = 2, 21 | c = 3; 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/description/fp_no-mutating-assign.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of [`Object.assign()`] with a variable as first argument 2 | 3 | [`Object.assign()`] is a method that mutates its first argument. In order to use this method as a non-mutating method, the first element may not be a variable (even if declared using `const`), and should therefore be a static value, such as an object expression. 4 | 5 | ### Fail 6 | 7 | ```js 8 | var a = {foo: 1, bar: 2}; 9 | var b = {bar: 3}; 10 | Object.assign(a, b); 11 | ``` 12 | 13 | ### Pass 14 | 15 | ```js 16 | var a = {foo: 1, bar: 2}; 17 | var b = {bar: 3}; 18 | Object.assign({}, a, b); 19 | Object.assign({foo: 1, bar: 2}, b); 20 | Object.assign(function foo() {}, {propTypes: {}}); 21 | ``` 22 | 23 | [`Object.assign()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign 24 | -------------------------------------------------------------------------------- /docs/description/fp_no-proxy.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of `Proxy` 2 | 3 | Proxies add a hidden layer of side-effects when accessing properties of objects or elements of arrays. 4 | 5 | ### Fail 6 | 7 | ```js 8 | const handler = { 9 | get(target, key) { 10 | return Math.min(target[key], 0); 11 | } 12 | }; 13 | const object = new Proxy(variable, handler); 14 | object.a; 15 | ``` 16 | 17 | ### Pass 18 | 19 | ```js 20 | function positiveProperty(target, key) { 21 | return Math.min(target[key], 0); 22 | } 23 | positiveProperty(object, 'a'); 24 | ``` 25 | -------------------------------------------------------------------------------- /docs/description/fp_no-rest-parameters.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of rest parameters 2 | 3 | [Rest parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters) can be used to allow any number of parameters to be passed to a function. 4 | 5 | Functional programming works better with known and explicit parameters. Having an undefined number of parameters does not work well with currying. 6 | 7 | ### Fail 8 | 9 | ```js 10 | function sum(...numbers) { 11 | return numbers.reduce((a, b) => a + b); 12 | } 13 | 14 | sum(1, 2, 3); 15 | ``` 16 | 17 | ### Pass 18 | 19 | ```js 20 | function sum(numbers) { 21 | return numbers.reduce((a, b) => a + b); 22 | } 23 | 24 | sum([1, 2, 3]); 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/fp_no-this.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of `this` 2 | 3 | When doing functional programming, you want to avoid having stateful objects and instead use simple JavaScript objects. 4 | 5 | ### Fail 6 | 7 | ```js 8 | const object = { 9 | numbers: [1, 2, 3], 10 | sum: function() { 11 | return this.numbers.reduce((a, b) => a + b, 0); 12 | } 13 | } 14 | 15 | object.sum(); 16 | ``` 17 | 18 | ### Pass 19 | 20 | ```js 21 | function sum(numbers) { 22 | return numbers.reduce((a, b) => a + b); 23 | } 24 | 25 | sum([1, 2, 3]); 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/description/fp_no-throw.md: -------------------------------------------------------------------------------- 1 | # Forbid the use of `throw` 2 | 3 | Instead of throwing an error, return an object containing the description of the error, or use a tool like `Either` that you can find in some functional libraries. 4 | 5 | ### Fail 6 | 7 | ```js 8 | function throwAnError() { 9 | throw new Error('some error message'); 10 | } 11 | ``` 12 | 13 | ### Pass 14 | 15 | ```js 16 | function returnAnError() { 17 | return Either.Left(new Error('some error message')); 18 | } 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/description/functional_no-this-expressions.md: -------------------------------------------------------------------------------- 1 | # Disallow this access (`functional/no-this-expressions`) 2 | 3 | 💼🚫 This rule is enabled in the following configs: `no-other-paradigms`, 🔒 `strict`. This rule is _disabled_ in the following configs: ☑️ `lite`, ✅ `recommended`. 4 | 5 | 6 | 7 | ## Rule Details 8 | 9 | This rule is a companion rule to the [no-classes](https://github.com/jonaskello/eslint-plugin-functional/tree/master/docs/rules/no-classes.md) rule. 10 | See the its docs for more info. 11 | 12 | ### ❌ Incorrect 13 | 14 | 15 | 16 | ```js 17 | /* eslint functional/no-this-expressions: "error" */ 18 | 19 | const foo = this.value + 17; 20 | ``` 21 | 22 | ### ✅ Correct 23 | 24 | ```js 25 | /* eslint functional/no-this-expressions: "error" */ 26 | 27 | const foo = object.value + 17; 28 | ``` 29 | -------------------------------------------------------------------------------- /docs/description/id-blacklist.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: id-blacklist 3 | rule_type: suggestion 4 | --- 5 | 6 | 7 | This rule was **deprecated** in ESLint v7.5.0 and replaced by the [id-denylist](id-denylist) rule. 8 | -------------------------------------------------------------------------------- /docs/description/import_imports-first.md: -------------------------------------------------------------------------------- 1 | # import/imports-first 2 | 3 | ❌ This rule is deprecated. 4 | 5 | 🔧 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix). 6 | 7 | 8 | 9 | This rule was **deprecated** in eslint-plugin-import v2.0.0. Please use the corresponding rule [`first`](https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/first.md). 10 | -------------------------------------------------------------------------------- /docs/description/import_no-self-import.md: -------------------------------------------------------------------------------- 1 | # import/no-self-import 2 | 3 | 4 | 5 | Forbid a module from importing itself. This can sometimes happen during refactoring. 6 | 7 | ## Rule Details 8 | 9 | ### Fail 10 | 11 | ```js 12 | // foo.js 13 | import foo from './foo'; 14 | 15 | const foo = require('./foo'); 16 | ``` 17 | 18 | ```js 19 | // index.js 20 | import index from '.'; 21 | 22 | const index = require('.'); 23 | ``` 24 | 25 | ### Pass 26 | 27 | ```js 28 | // foo.js 29 | import bar from './bar'; 30 | 31 | const bar = require('./bar'); 32 | ``` 33 | -------------------------------------------------------------------------------- /docs/description/jasmine_expect-matcher.md: -------------------------------------------------------------------------------- 1 | # Enforce expect having a corresponding matcher call (expect-matcher). 2 | 3 | This rule is enabled by default. 4 | 5 | ## Rule details 6 | 7 | This rule triggers a warning if `expect` is called without a matcher. 8 | 9 | ```js 10 | expect("something"); 11 | ``` 12 | 13 | or when a matcher function was not called: 14 | 15 | ```js 16 | expect(true).toBeDefined 17 | ``` 18 | 19 | 20 | The following patterns are not warnings: 21 | 22 | ```js 23 | expect("something").toEqual("something"); 24 | expect([1, 2, 3]).toEqual([1, 2, 3]); 25 | expect(true).toBeDefined(); 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/description/jasmine_expect-single-argument.md: -------------------------------------------------------------------------------- 1 | # Enforce expect having a single argument (expect-single-argument). 2 | 3 | Ensure `expect` is called with a single argument. 4 | 5 | ## Rule details 6 | 7 | This rule triggers a warning if `expect` is called with more than one argument or without arguments. 8 | 9 | ```js 10 | expect(); 11 | expect("something", "more"); 12 | ``` 13 | 14 | ### Default configuration 15 | 16 | The following patterns are considered warnings: 17 | 18 | ```js 19 | expect(); 20 | expect().toEqual("something"); 21 | expect("something", "else"); 22 | ``` 23 | 24 | The following patterns are not warnings: 25 | 26 | ```js 27 | expect("something").toEqual("something"); 28 | expect([1, 2, 3]).toEqual([1, 2, 3]); 29 | expect(true).toBeDefined(); 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/description/jasmine_named-spy.md: -------------------------------------------------------------------------------- 1 | # Enforce using named spies (named-spy) 2 | 3 | Make sure named spies are used and the assigned variable matches the spy name. 4 | Using properly named spies makes stacktraces more obvious. 5 | 6 | ## Rule details 7 | 8 | The following are considered warnings: 9 | 10 | ```js 11 | var spy = jasmine.createSpy(); 12 | callback = jasmine.createSpy('success'); 13 | ``` 14 | 15 | The following patterns are not warnings: 16 | 17 | ```js 18 | var success = jasmine.createSpy('success') 19 | onError = jasmine.createSpy('onError') 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/description/jasmine_no-assign-spyon.md: -------------------------------------------------------------------------------- 1 | # Disallow the assignment of a `spyOn` return value (no-assign-spyon). 2 | 3 | It is often more obvious to pass the spy as a property of the object spied upon 4 | instead of from a referencing variable. 5 | 6 | The following are considered warnings: 7 | 8 | ```js 9 | var someSpy = spyOn(someObj, 'someMethod'); 10 | // Handle someSpy, for example 11 | // expect(someSpy).toHaveBeenCalled(); 12 | ``` 13 | 14 | The following are not warnings: 15 | 16 | ```js 17 | spyOn(someObj, 'someMethod'); 18 | // Handle someObj.someMethod, for example 19 | // expect(someObj.someMethod).toHaveBeenCalled(); 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/description/jasmine_no-disabled-tests.md: -------------------------------------------------------------------------------- 1 | # Disallow use of disabled tests (no-disabled-tests) 2 | 3 | Jasmine uses `xdescribe` and `xit` to disable a suite/spec. 4 | 5 | Whilst handy to toggle a broken suite/spec during development, disabled tests 6 | are often an indicator of a deeper problem. 7 | 8 | ## Rule details 9 | 10 | This rule triggers a **warning** (is set to **1** by default) whenever it 11 | encounters `xdescribe` and `xit`. 12 | 13 | The following patterns are considered warnings: 14 | 15 | ```js 16 | xdescribe('My disabled suite', function() {}); 17 | 18 | describe('My suite', function() { 19 | xit('My disabled spec', function() {}); 20 | }); 21 | ``` 22 | 23 | The following patterns are not warnings: 24 | 25 | ```js 26 | describe('My suite', function() {}); 27 | describe('My suite', function() { 28 | it('My spec', function() {}); 29 | }); 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-after-all-blocks.md: -------------------------------------------------------------------------------- 1 | # padding-around-after-all-blocks 2 | 3 | ## Rule Details 4 | 5 | This rule enforces a line of padding before _and_ after 1 or more `afterAll` statements. 6 | 7 | Note that it doesn't add/enforce a padding line if it's the last statement in its scope. 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const someText = 'abc'; 13 | afterAll(() => {}); 14 | describe('someText', () => {}); 15 | ``` 16 | 17 | Examples of **correct** code for this rule: 18 | 19 | ```js 20 | const someText = 'abc'; 21 | 22 | afterAll(() => {}); 23 | 24 | describe('someText', () => {}); 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-after-each-blocks.md: -------------------------------------------------------------------------------- 1 | # padding-around-after-each-blocks 2 | 3 | ## Rule Details 4 | 5 | This rule enforces a line of padding before _and_ after 1 or more `afterEach` statements. 6 | 7 | Note that it doesn't add/enforce a padding line if it's the last statement in its scope. 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const something = 123; 13 | afterEach(() => { 14 | // more stuff 15 | }); 16 | describe('foo', () => {}); 17 | ``` 18 | 19 | Examples of **correct** code for this rule: 20 | 21 | ```js 22 | const something = 123; 23 | 24 | afterEach(() => { 25 | // more stuff 26 | }); 27 | 28 | describe('foo', () => {}); 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-all.md: -------------------------------------------------------------------------------- 1 | # padding-around-all 2 | 3 | ## Rule Details 4 | 5 | This is a meta rule that simply enables all of the following rules: 6 | 7 | - [padding-around-after-all-blocks](padding-around-after-all-blocks.md) 8 | - [padding-around-after-each-blocks](padding-around-after-each-blocks.md) 9 | - [padding-around-before-all-blocks](padding-around-before-all-blocks.md) 10 | - [padding-around-before-each-blocks](padding-around-before-each-blocks.md) 11 | - [padding-around-expect-groups](padding-around-expect-groups.md) 12 | - [padding-around-describe-blocks](padding-around-describe-blocks.md) 13 | - [padding-around-test-blocks](padding-around-test-blocks.md) 14 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-before-all-blocks.md: -------------------------------------------------------------------------------- 1 | # padding-around-before-all-blocks 2 | 3 | ## Rule Details 4 | 5 | This rule enforces a line of padding before _and_ after `beforeAll` statements. 6 | 7 | Note that it doesn't add/enforce a padding line if it's the last statement in its scope. 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const something = 123; 13 | beforeAll(() => { 14 | // more stuff 15 | }); 16 | describe('foo', () => {}); 17 | ``` 18 | 19 | Examples of **correct** code for this rule: 20 | 21 | ```js 22 | const something = 123; 23 | 24 | beforeAll(() => { 25 | // more stuff 26 | }); 27 | 28 | describe('foo', () => {}); 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-before-each-blocks.md: -------------------------------------------------------------------------------- 1 | # padding-around-before-each-blocks 2 | 3 | ## Rule Details 4 | 5 | This rule enforces a line of padding before _and_ after 1 or more `beforeEach` statements 6 | 7 | Note that it doesn't add/enforce a padding line if it's the last statement in its scope 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const something = 123; 13 | beforeEach(() => { 14 | // more stuff 15 | }); 16 | describe('foo', () => {}); 17 | ``` 18 | 19 | Examples of **correct** code for this rule: 20 | 21 | ```js 22 | const something = 123; 23 | 24 | beforeEach(() => { 25 | // more stuff 26 | }); 27 | 28 | describe('foo', () => {}); 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-describe-blocks.md: -------------------------------------------------------------------------------- 1 | # padding-around-describe-blocks 2 | 3 | ## Rule Details 4 | 5 | This rule enforces a line of padding before _and_ after 1 or more `beforeEach` statements 6 | 7 | Note that it doesn't add/enforce a padding line if it's the last statement in its scope 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const thing = 123; 13 | describe('foo', () => { 14 | // stuff 15 | }); 16 | describe('bar', () => { 17 | // more stuff 18 | }); 19 | ``` 20 | 21 | Examples of **correct** code for this rule: 22 | 23 | ```js 24 | const thing = 123; 25 | 26 | describe('foo', () => { 27 | // stuff 28 | }); 29 | 30 | describe('bar', () => { 31 | // more stuff 32 | }); 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/description/jest-formatting_padding-around-test-blocks.md: -------------------------------------------------------------------------------- 1 | # padding-around-test-blocks 2 | 3 | ## Rule Details 4 | 5 | This rule enforces a line of padding before _and_ after 1 or more `test`/`it` statements 6 | 7 | Note that it doesn't add/enforce a padding line if it's the last statement in its scope 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const thing = 123; 13 | test('foo', () => {}); 14 | test('bar', () => {}); 15 | ``` 16 | 17 | ```js 18 | const thing = 123; 19 | it('foo', () => {}); 20 | it('bar', () => {}); 21 | ``` 22 | 23 | Examples of **correct** code for this rule: 24 | 25 | ```js 26 | const thing = 123; 27 | 28 | test('foo', () => {}); 29 | 30 | test('bar', () => {}); 31 | ``` 32 | 33 | ```js 34 | const thing = 123; 35 | 36 | it('foo', () => {}); 37 | 38 | it('bar', () => {}); 39 | ``` 40 | -------------------------------------------------------------------------------- /docs/description/jsx-a11y_lang.md: -------------------------------------------------------------------------------- 1 | # jsx-a11y/lang 2 | 3 | 4 | 5 | The `lang` prop on the `` element must be a valid IETF's BCP 47 language tag. 6 | 7 | ## Rule details 8 | 9 | This rule takes no arguments. 10 | 11 | ### Succeed 12 | 13 | ```jsx 14 | 15 | 16 | ``` 17 | 18 | ### Fail 19 | 20 | ```jsx 21 | 22 | 23 | ``` 24 | 25 | ## Accessibility guidelines 26 | - [WCAG 3.1.1](https://www.w3.org/WAI/WCAG21/Understanding/language-of-page) 27 | 28 | ### Resources 29 | - [axe-core, valid-lang](https://dequeuniversity.com/rules/axe/3.2/valid-lang) 30 | - [Language tags in HTML and XML](https://www.w3.org/International/articles/language-tags/) 31 | - [IANA Language Subtag Registry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry) 32 | -------------------------------------------------------------------------------- /docs/description/jsx-a11y_prefer-tag-over-role.md: -------------------------------------------------------------------------------- 1 | # jsx-a11y/prefer-tag-over-role 2 | 3 | 4 | 5 | Enforces using semantic DOM elements over the ARIA `role` property. 6 | 7 | ## Rule details 8 | 9 | This rule takes no arguments. 10 | 11 | ### Succeed 12 | 13 | ```jsx 14 |
...
15 |
...
16 | 17 | ``` 18 | 19 | ### Fail 20 | 21 | ```jsx 22 |
23 |
24 | ``` 25 | 26 | ## Accessibility guidelines 27 | 28 | - [WAI-ARIA Roles model](https://www.w3.org/TR/wai-aria-1.0/roles) 29 | 30 | ### Resources 31 | 32 | - [MDN WAI-ARIA Roles](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles) 33 | -------------------------------------------------------------------------------- /docs/description/jsx-a11y_scope.md: -------------------------------------------------------------------------------- 1 | # jsx-a11y/scope 2 | 3 | 💼 This rule is enabled in the following configs: ☑️ `recommended`, 🔒 `strict`. 4 | 5 | 6 | 7 | The `scope` prop should be used only on `` elements. 8 | 9 | ## Rule details 10 | 11 | This rule takes no arguments. 12 | 13 | ### Succeed 14 | ```jsx 15 | 16 | 17 | ``` 18 | 19 | ### Fail 20 | 21 | ```jsx 22 |
23 | ``` 24 | 25 | ## Accessibility guidelines 26 | - [WCAG 1.3.1](https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships) 27 | - [WCAG 4.1.1](https://www.w3.org/WAI/WCAG21/Understanding/parsing) 28 | 29 | ### Resources 30 | - [axe-core, scope-attr-valid](https://dequeuniversity.com/rules/axe/3.5/scope-attr-valid) 31 | -------------------------------------------------------------------------------- /docs/description/lit_attribute-value-entities.md: -------------------------------------------------------------------------------- 1 | # Disallows unencoded HTML entities in attribute values (attribute-value-entities) 2 | 3 | Reserved characters should be encoded as HTML entities in attribute 4 | values to avoid parsing errors. 5 | 6 | For example, `>` should be represented as `>`. 7 | 8 | ## Rule Details 9 | 10 | This rule disallows using unencoded reserved characters in attribute values. 11 | 12 | The following patterns are considered warnings: 13 | 14 | ```ts 15 | html``; 16 | html``; 17 | html``; 18 | html``; 19 | ``` 20 | 21 | The following patterns are not warnings: 22 | 23 | ```ts 24 | html``; 25 | ``` 26 | 27 | ## When Not To Use It 28 | 29 | If you don't care about potential parsing errors, then you will not 30 | need this rule. 31 | -------------------------------------------------------------------------------- /docs/description/lit_ban-attributes.md: -------------------------------------------------------------------------------- 1 | # Disallows a set of attributes from being used (ban-attributes) 2 | 3 | You may prefer to disallow some attributes for various reasons in templates, 4 | this simply allows you to create such a denylist. 5 | 6 | ## Rule Details 7 | 8 | This rule disallows a list of attributes within templates. 9 | 10 | The following patterns are considered warnings: 11 | 12 | ```ts 13 | /*eslint lit/ban-attributes: ["error", "attr"] */ 14 | html``; 15 | ``` 16 | 17 | The following patterns are not warnings: 18 | 19 | ```ts 20 | html``; 21 | ``` 22 | 23 | ## When Not To Use It 24 | 25 | If you don't have any particular attributes you wish to disallow, you do not 26 | need this rule. 27 | -------------------------------------------------------------------------------- /docs/description/lit_no-duplicate-template-bindings.md: -------------------------------------------------------------------------------- 1 | # Disallows duplicate names in template bindings (no-duplicate-template-bindings) 2 | 3 | Binding a property or attribute multiple times results in the previous 4 | values being overwritten, thus making them useless. 5 | 6 | ## Rule Details 7 | 8 | This rule disallows binding the same property multiple times in templates. 9 | 10 | The following patterns are considered warnings: 11 | 12 | ```ts 13 | html``; 14 | html``; 15 | ``` 16 | 17 | The following patterns are not warnings: 18 | 19 | ```ts 20 | html``; 21 | ``` 22 | 23 | ## When Not To Use It 24 | 25 | If you don't care about repeated bindings, then you will not need this rule. 26 | -------------------------------------------------------------------------------- /docs/description/lit_no-invalid-html.md: -------------------------------------------------------------------------------- 1 | # Disallows invalid HTML in templates (no-invalid-html) 2 | 3 | Templates should all contain valid HTML, if any, as it is expected 4 | to be parsed as part of rendering. 5 | 6 | ## Rule Details 7 | 8 | This rule disallows invalid HTML in templates. 9 | 10 | The following patterns are considered warnings: 11 | 12 | ```ts 13 | html``; 14 | html``; 15 | ``` 16 | 17 | The following patterns are not warnings: 18 | 19 | ```ts 20 | html``; 21 | ``` 22 | 23 | ## When Not To Use It 24 | 25 | If you don't care about invalid HTML, then you will not need this rule. 26 | -------------------------------------------------------------------------------- /docs/description/lit_no-legacy-imports.md: -------------------------------------------------------------------------------- 1 | # Detects usages of legacy lit imports (no-legacy-imports) 2 | 3 | Legacy lit imports should not be used in newer versions and have been 4 | replaced. 5 | 6 | ## Rule Details 7 | 8 | This rule disallows use of legacy lit imports. 9 | 10 | The following patterns are considered warnings: 11 | 12 | ```ts 13 | import {internalProperty} from 'lit-element'; 14 | ``` 15 | 16 | The following patterns are not warnings: 17 | 18 | ```ts 19 | import {state} from 'lit/decorators'; 20 | ``` 21 | 22 | ## When Not To Use It 23 | 24 | If you still rely on older lit, you may want to disable this rule. 25 | -------------------------------------------------------------------------------- /docs/description/lit_no-useless-template-literals.md: -------------------------------------------------------------------------------- 1 | # Disallows redundant literal values in templates (no-useless-template-literals) 2 | 3 | Literal values being interpolated into templates are redundant. 4 | 5 | ## Rule Details 6 | 7 | This rule disallows using literal values in templates. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```ts 12 | html`foo ${'bar'}`; 13 | html`foo ${true}`; 14 | ``` 15 | 16 | The following patterns are not warnings: 17 | 18 | ```ts 19 | html`foo ${someVar}`; 20 | ``` 21 | 22 | ## When Not To Use It 23 | 24 | If you don't care about interpolating literal values, then you will not need this rule. 25 | -------------------------------------------------------------------------------- /docs/description/lit_no-value-attribute.md: -------------------------------------------------------------------------------- 1 | # Detects usages of the `value` attribute (no-value-attribute) 2 | 3 | Often with input elements, the `value` attribute is bound rather than 4 | the property by the same name. This can lead to binding issues as only 5 | the initial value is then set. 6 | 7 | ## Rule Details 8 | 9 | This rule disallows use of the value attribute on input elements. 10 | 11 | The following patterns are considered warnings: 12 | 13 | ```ts 14 | html``; 15 | html``; 16 | ``` 17 | 18 | The following patterns are not warnings: 19 | 20 | ```ts 21 | html``; 22 | html``; 23 | ``` 24 | 25 | ## When Not To Use It 26 | 27 | If you wish to bind the `value` attribute, you will not need this rule. 28 | -------------------------------------------------------------------------------- /docs/description/lodash-fp_no-extraneous-args.md: -------------------------------------------------------------------------------- 1 | # No extraneous arguments to methods with a fixed arity 2 | 3 | In `lodash/fp`, most methods have a fixed number of arguments, often ignoring optional arguments available in vanilla Lodash. 4 | For instance, in vanilla Lodash, [`_.get`] accepts a third parameter that serves as the default value, which gets ignored in `lodash/fp` (hint: use the `_.getOr` method instead which exists for that purpose). The rule reports instances where too many arguments are passed to a method. 5 | 6 | ### Fail 7 | 8 | ```js 9 | _.get(path, defaultValue, object); 10 | _.find(iteratee, object, extraneous); 11 | ``` 12 | 13 | ### Pass 14 | 15 | ```js 16 | _.get(path, object); 17 | _.getOr(path, defaultValue, object); 18 | _.find(iteratee, object); 19 | ``` 20 | 21 | [`_.get`]: https://lodash.com/docs#get 22 | -------------------------------------------------------------------------------- /docs/description/lodash-fp_no-extraneous-partials.md: -------------------------------------------------------------------------------- 1 | # No extraneous partials 2 | 3 | In `lodash/fp`, most methods are curried. This means there are multiple ways to 4 | call a `lodash/fp` method. Where possible you should always call the method 5 | directly, to avoid the creation of any intermediate partals. 6 | 7 | ### Fail 8 | 9 | ```js 10 | _.get(path)(object); 11 | _.getOr(path)(defaultValue)(object); 12 | _.find(iteratee)(object); 13 | ``` 14 | 15 | ### Pass 16 | 17 | ```js 18 | _.get(path, object); 19 | _.getOr(path, defaultValue, object); 20 | _.find(iteratee, object); 21 | _.flow(_.get(path), _.map(fn))(object); 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/description/lodash-fp_no-single-composition.md: -------------------------------------------------------------------------------- 1 | # Enforce at least two methods arguments for composition methods 2 | 3 | Giving one argument to composition methods like [`_.flow`](https://lodash.com/docs#flow) and [`_.compose`](https://lodash.com/docs#flowRight) is useless, as `_.flow(fn)(x)` is the same as calling `fn(x)`. 4 | 5 | ### Fail 6 | 7 | ```js 8 | import _, {flow} from 'lodash/fp'; 9 | 10 | flow(fn)(x); 11 | _.flow(fn)(x); 12 | ``` 13 | 14 | ### Pass 15 | 16 | ```js 17 | import _, {flow} from 'lodash/fp'; 18 | 19 | flow(fn1, fn2)(x); 20 | _.flow(fn1, fn2)(x); 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/description/lodash-fp_use-fp.md: -------------------------------------------------------------------------------- 1 | # Use lodash/fp instead of Lodash 2 | 3 | This rule disallows the use of vanilla Lodash in your code. The aim for this is to avoid mixing both vanilla and fp Lodash in your codebase. 4 | 5 | ### Fail 6 | 7 | ```js 8 | import _ from 'lodash'; 9 | import _ from 'lodash/bindAll'; 10 | 11 | const _ = require('lodash'); 12 | const _ = require('lodash/bindAll'); 13 | ``` 14 | 15 | ### Pass 16 | 17 | ```js 18 | import _ from 'lodash/fp'; 19 | import _ from 'lodash/fp/bindAll'; 20 | 21 | const _ = require('lodash/fp'); 22 | const _ = require('lodash/fp/bindAll'); 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/lodash_collection-return.md: -------------------------------------------------------------------------------- 1 | # Collection Return Statement 2 | 3 | When using a Lodash collection method that isn't forEach, the iteratee should return a value, otherwise it could result in either unclear code or unexpected results. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | _.map(arr, function(x) { console.log(x); }); 14 | 15 | _.some(arr, function(x) { if (x.a) {f(x); }); 16 | 17 | _.every(collection, x => { f(x); }); 18 | 19 | ``` 20 | 21 | The following patterns are not considered warnings: 22 | 23 | ```js 24 | 25 | _.map(x => x + 1); 26 | 27 | _.forEach(arr, function(a) { console.log(a); }); 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/lodash_no-commit.md: -------------------------------------------------------------------------------- 1 | # No Commit 2 | 3 | Using `_.prototype.commit()` at the end of the chain executes the chain but doesn't unwrap the value. 4 | In most cases, this means that `_.prototype.value()` would be preferable. 5 | 6 | ## Rule Details 7 | 8 | This rule takes no arguments. 9 | 10 | The following patterns are considered warnings: 11 | 12 | ```js 13 | 14 | _(a).map(f).filter(g).commit(); 15 | 16 | ``` 17 | 18 | The following patterns are not considered warnings: 19 | 20 | ```js 21 | 22 | _(a).map(f).filter(g).value(); 23 | 24 | ``` 25 | 26 | 27 | ## When Not To Use It 28 | 29 | If you do not want to disallow using `commit`, you should not use this rule. -------------------------------------------------------------------------------- /docs/description/lodash_no-double-unwrap.md: -------------------------------------------------------------------------------- 1 | # Unwrapping an already finished chain (no-double-unwrap) 2 | 3 | Some Lodash and wrapper methods remove the wrapper from the chain, e.g. `reduce`, `max` or `join`. 4 | In these cases, the use of `.value()` would most likely cause an error. 5 | 6 | 7 | ## Rule Details 8 | 9 | This rule takes no arguments. 10 | 11 | The following patterns are considered warnings: 12 | 13 | ```js 14 | var x = _(a).reduce(f).value(); 15 | 16 | 17 | ``` 18 | 19 | The following patterns are not considered warnings: 20 | 21 | ```js 22 | var x = _(a).map(f).reduce(g); 23 | 24 | var x = _(a).map(f).value(); 25 | 26 | var x = _.chain(a).map(f).reduce(g).value(); 27 | ``` 28 | 29 | 30 | ## When Not To Use It 31 | 32 | If you don't want to check for this possible error, or if the objects you pass to Lodash have a `value`, `run` or `toJSON` method. 33 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-compact.md: -------------------------------------------------------------------------------- 1 | # Prefer compact 2 | 3 | When using _.filter with an identity or boolean casting , it could improve readability by switching to _.compact 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | _(arr).map(f).filter(function(x) {return x}), 14 | 15 | _.filter(arr, function(x) { return !!x}) 16 | ``` 17 | 18 | The following patterns are not considered warnings: 19 | 20 | ```js 21 | 22 | var x = _.filter(arr, function(x) {return !x.a && p}); 23 | 24 | var x = _.filter(arr, function(x) {return f(x) || g(x)}); 25 | 26 | var x = _.compact(arr); 27 | ``` 28 | 29 | 30 | ## When Not To Use It 31 | 32 | If you do not want to enforce using `_.compact`, you should not use this rule. 33 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-find.md: -------------------------------------------------------------------------------- 1 | # Prefer find 2 | 3 | When using _.filter and accessing the first or last result, you should probably use `_.find` or `_.findLast`, respectively. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | const x = _.filter(a, f)[0]; 13 | ``` 14 | 15 | ```js 16 | const x = _.head(_.filter(a, f)); 17 | ``` 18 | 19 | ```js 20 | const x = _(a) 21 | .filter(f) 22 | .head() 23 | ``` 24 | 25 | ```js 26 | const x = _.last(_.filter(a, f)); 27 | ``` 28 | 29 | ```js 30 | const x = _.head(_.reject(a, f)); 31 | ``` 32 | The following patterns are not considered warnings: 33 | 34 | ```js 35 | const x = _.filter(a, f); 36 | ``` 37 | 38 | ```js 39 | const x = _.filter(a, f)[3]; 40 | ``` 41 | 42 | ```js 43 | const x = _.find(a, f); 44 | ``` -------------------------------------------------------------------------------- /docs/description/lodash_prefer-get.md: -------------------------------------------------------------------------------- 1 | # Prefer get 2 | 3 | When writing an expression like `a && a.b && a.b.c` just to make sure the path exists, it is more readable to use the functions `_.get`, `_.set` and `_.has` instead. 4 | 5 | ## Rule Details 6 | 7 | This rule takes one argument - the minimal depth (default is 3). 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | var isThree = a && a.b && a.b.c === 3; 14 | 15 | if (a && a.b && a.b.c) { 16 | // ... 17 | } 18 | 19 | ``` 20 | 21 | The following patterns are not considered warnings: 22 | 23 | ```js 24 | 25 | var isThree = _.get(a, 'b.c') === 3; 26 | 27 | if (_.has(a, 'b.c')) { 28 | // ... 29 | } 30 | 31 | ``` 32 | 33 | 34 | ## When Not To Use It 35 | 36 | If you do not want to enforce using `get`, you should not use this rule. 37 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-immutable-method.md: -------------------------------------------------------------------------------- 1 | # Prefer immutable methods 2 | Prefer a method that doesn't mutate the arguments when available. 3 | 4 | ## Rule Details 5 | 6 | This rule takes no arguments 7 | 8 | The following patterns are considered warnings: 9 | 10 | ```js 11 | _.pull(arr, value) 12 | ``` 13 | 14 | ```js 15 | const a = _.remove(arr, fn); 16 | ``` 17 | 18 | The following patterns are not considered warnings: 19 | 20 | ```js 21 | const a = _.without(arr, value); 22 | ``` 23 | 24 | ```js 25 | const a = _.filter(arr, fn); 26 | ``` 27 | 28 | 29 | ## When Not To Use It 30 | If you do not want to enforce using methods that do not mutate the arguments when available, do not enable this rule. 31 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-is-nil.md: -------------------------------------------------------------------------------- 1 | # Prefer _.isNil 2 | 3 | When checking that a value is undefined or null (but not false or ''), it is more concise to use _.isNil instead. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | var t = !_.isNull(x) && !_.isUndefined(x); 13 | 14 | var t = x === undefined || x === null; 15 | ``` 16 | 17 | The following patterns are not considered warnings: 18 | 19 | ```js 20 | 21 | var t = _.isNil(x); 22 | 23 | var t = _.isUndefined(x) || _.isNull(y); 24 | ``` 25 | 26 | 27 | ## When Not To Use It 28 | ##### This rule is only relevant for Lodash 4. If you don't use Lodash 4, you should not use this rule. 29 | If you do not want to enforce using `_.isNil`, and prefer using specific checks instead. 30 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-map.md: -------------------------------------------------------------------------------- 1 | # Prefer map 2 | 3 | When using `_.forEach` that pushes into an array, it could improve readability to use `_.map` instead. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | _.forEach(arr, function(x) { newArr.push(f(x))}) 14 | 15 | ``` 16 | 17 | The following patterns are not considered warnings: 18 | 19 | ```js 20 | 21 | _.forEach(arr, function(x) { if (x.a) { a.push(x) }}) 22 | ``` 23 | 24 | 25 | ## When Not To Use It 26 | 27 | If you do not want to enforce using `map`, you should not use this rule. 28 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-noop.md: -------------------------------------------------------------------------------- 1 | # Prefer noop 2 | 3 | When defining an empty function (e.g. for callbacks) it can be more readable to use `_.noop` instead 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | functionWithCallback(function(){}); 14 | 15 | const emptyFunction = ()=> {}; 16 | 17 | ``` 18 | 19 | The following patterns are not considered warnings: 20 | 21 | ```js 22 | 23 | functionWithCallback(function(x){return x + 1}); 24 | 25 | const sqr = x => x * x; 26 | 27 | ``` 28 | 29 | 30 | ## When Not To Use It 31 | 32 | If you do not want to enforce using `_.noop`, you should not use this rule. 33 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-over-quantifier.md: -------------------------------------------------------------------------------- 1 | # Prefer Over-Quantifier 2 | 3 | When using methods that select according to a set of conditions with 'some' and 'every' behavior, it's possible to pass an iteratee created by overSome and overEvery 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | var t = _.filter(a, function(x) { return f(x) && g(x); }) 13 | 14 | 'var t = _.filter(a, x => f(x) || g(x) || h(x))' 15 | 16 | ``` 17 | 18 | The following patterns are not considered warnings: 19 | 20 | ```js 21 | var t = _.filter(a, _.overSome([f, g, h]); 22 | 23 | ``` 24 | ## When Not To Use It 25 | ##### This rule is only relevant for Lodash 4. If you don't use Lodash 4, you should not use this rule. 26 | If you do not want to enforce using `_.overSome` and `_.overEvery`, do not use this rule. -------------------------------------------------------------------------------- /docs/description/lodash_prefer-startswith.md: -------------------------------------------------------------------------------- 1 | # Prefer _.startsWith 2 | 3 | To check that a string starts with a substring or an array starts with an item, it's better to use `_.startsWith` than comparing the index to zero. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | var x = a.indexOf(b) === 0; 14 | 15 | if (str.indexOf('@@') !== 0) {} 16 | 17 | ``` 18 | 19 | The following patterns are not considered warnings: 20 | 21 | ```js 22 | 23 | var x = a.indexOf(b); 24 | 25 | if (str.indexOf('@@') > 0) {} 26 | 27 | ``` 28 | 29 | 30 | ## When Not To Use It 31 | 32 | If you do not want to use Lodash to check that an array or a string starts with an item, do not use this rule. 33 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-thru.md: -------------------------------------------------------------------------------- 1 | # Prefer thru 2 | 3 | When starting a chain with an initial value that contains a function call on a single argument, it could improve readability to move that function to the chain itself with `thru`. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | _(f(x)).map(g).reduce(h); 14 | 15 | _.chain(f1(f2(x).split(''))).map(f).reduce(g).value(); 16 | 17 | ``` 18 | 19 | The following patterns are not considered warnings: 20 | 21 | ```js 22 | 23 | _(str).thru(f).map(h).reduce(g); 24 | 25 | ``` 26 | 27 | 28 | ## When Not To Use It 29 | 30 | If you do not want to enforce using `thru`, you should not use this rule. 31 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-times.md: -------------------------------------------------------------------------------- 1 | # Prefer _.times 2 | 3 | When using `_.map` in which the iteratee does not have any arguments, it's better to use `_.times`. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | _.map(arr, function() { return 7}); 14 | 15 | _(a).map(() => 7).value(); 16 | 17 | _.map(Array(10), function() {return f(y)}); 18 | 19 | import f from 'lodash/map'; f(arr, () => 0) 20 | 21 | ``` 22 | 23 | The following patterns are not considered warnings: 24 | 25 | ```js 26 | 27 | _.times(arr.length, _.constant(7)); 28 | 29 | _.map(arr, function(x) {return x * x;}); 30 | 31 | ``` 32 | 33 | 34 | ## When Not To Use It 35 | 36 | If you do not want to enforce always using `times` when not using the arguments, you should not use this rule. 37 | -------------------------------------------------------------------------------- /docs/description/lodash_prefer-wrapper-method.md: -------------------------------------------------------------------------------- 1 | # Prefer wrapper method 2 | 3 | When starting a chain with an initial value that contains a call to an array or string method, it could be better to move that method to the chain itself. 4 | 5 | ## Rule Details 6 | 7 | This rule takes no arguments. 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```js 12 | 13 | _(str.split(' ')).map(f).reduce(g); 14 | 15 | _.chain(str.split(' ')).map(f).reduce(g).value(); 16 | 17 | ``` 18 | 19 | The following patterns are not considered warnings: 20 | 21 | ```js 22 | 23 | _(str).split(' ').map(f).reduce(g); 24 | 25 | _.chain(str).split(' ').map(f).reduce(g).value(); 26 | ``` 27 | 28 | 29 | ## When Not To Use It 30 | 31 | If you do not want to enforce using wrapper methods, you should not use this rule. 32 | -------------------------------------------------------------------------------- /docs/description/lodash_preferred-alias.md: -------------------------------------------------------------------------------- 1 | # Preferred Alias 2 | 3 | Some Lodash methods have one or more aliases, which can lead to inconsistent code and decrease readability. 4 | 5 | ## Rule Details 6 | 7 | This rule takes one argument - an optional options object. This object can have one key: 8 | - `ignoreMethods`: contains an array of method names that should not be reported on. 9 | 10 | The following patterns are considered warnings: 11 | 12 | ```js 13 | _.each(users, f); 14 | ``` 15 | 16 | The following patterns are not considered warnings: 17 | 18 | ```js 19 | _.forEach(users, f); 20 | ``` 21 | 22 | 23 | ## When Not To Use It 24 | 25 | If you do not want to enforce preferred alias, then you can disable this rule. 26 | -------------------------------------------------------------------------------- /docs/description/meteor_no-template-parent-data.md: -------------------------------------------------------------------------------- 1 | # Avoid accessing template parent data (no-template-parent-data) 2 | 3 | When making children aware of their parents data context, they are tightly integrated and hard to reuse. 4 | Changing the parent can lead to unintended errors in the child. 5 | Passing down the properties explicitly avoids this issue. 6 | 7 | 8 | ## Rule Details 9 | 10 | This rule aims to ensure child components are unaware of their parents. 11 | 12 | The following patterns are considered warnings: 13 | 14 | ```js 15 | 16 | Template.parentData() 17 | Template.parentData(0) 18 | Template.parentData(1) 19 | Template.parentData(foo) 20 | 21 | ``` 22 | 23 | The following patterns are not warnings: 24 | 25 | ```js 26 | 27 | Template.currentData() 28 | 29 | ``` 30 | 31 | ## Further Reading 32 | 33 | - http://docs.meteor.com/#/full/template_parentdata 34 | -------------------------------------------------------------------------------- /docs/description/no-delete-var.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: no-delete-var 3 | rule_type: suggestion 4 | --- 5 | 6 | 7 | 8 | The purpose of the `delete` operator is to remove a property from an object. Using the `delete` operator on a variable might lead to unexpected behavior. 9 | 10 | ## Rule Details 11 | 12 | This rule disallows the use of the `delete` operator on variables. 13 | 14 | If ESLint parses code in strict mode, the parser (instead of this rule) reports the error. 15 | 16 | Examples of **incorrect** code for this rule: 17 | 18 | ::: incorrect { "sourceType": "script" } 19 | 20 | ```js 21 | /*eslint no-delete-var: "error"*/ 22 | 23 | var x; 24 | delete x; 25 | ``` 26 | 27 | ::: 28 | -------------------------------------------------------------------------------- /docs/description/no-script-url.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: no-script-url 3 | rule_type: suggestion 4 | further_reading: 5 | - https://stackoverflow.com/questions/13497971/what-is-the-matter-with-script-targeted-urls 6 | --- 7 | 8 | 9 | Using `javascript:` URLs is considered by some as a form of `eval`. Code passed in `javascript:` URLs has to be parsed and evaluated by the browser in the same way that `eval` is processed. 10 | 11 | ## Rule Details 12 | 13 | Examples of **incorrect** code for this rule: 14 | 15 | ::: incorrect 16 | 17 | ```js 18 | /*eslint no-script-url: "error"*/ 19 | 20 | location.href = "javascript:void(0)"; 21 | 22 | location.href = `javascript:void(0)`; 23 | ``` 24 | 25 | ::: 26 | 27 | ## Compatibility 28 | 29 | * **JSHint**: This rule corresponds to `scripturl` rule of JSHint. 30 | -------------------------------------------------------------------------------- /docs/description/no-spaced-func.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: no-spaced-func 3 | rule_type: layout 4 | --- 5 | 6 | 7 | 8 | This rule was **deprecated** in ESLint v3.3.0 and replaced by the [func-call-spacing](func-call-spacing) rule. 9 | 10 | While it's possible to have whitespace between the name of a function and the parentheses that execute it, such patterns tend to look more like errors. 11 | 12 | ## Rule Details 13 | 14 | This rule disallows spacing between function identifiers and their applications. 15 | 16 | Examples of **incorrect** code for this rule: 17 | 18 | ::: incorrect 19 | 20 | ```js 21 | /*eslint no-spaced-func: "error"*/ 22 | 23 | fn () 24 | 25 | fn 26 | () 27 | ``` 28 | 29 | ::: 30 | 31 | Examples of **correct** code for this rule: 32 | 33 | ::: correct 34 | 35 | ```js 36 | /*eslint no-spaced-func: "error"*/ 37 | 38 | fn() 39 | ``` 40 | 41 | ::: 42 | -------------------------------------------------------------------------------- /docs/description/nuxt_require-func-head.md: -------------------------------------------------------------------------------- 1 | # nuxt/require-func-head 2 | 3 | > enforce `head` property in component to be a function. 4 | 5 | ## Rule Details 6 | 7 | This rule is enforcing `head` property in component to be a function. 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | 13 | export default { 14 | head: { 15 | title: "My page" 16 | } 17 | } 18 | 19 | ``` 20 | 21 | Examples of **correct** code for this rule: 22 | 23 | ```js 24 | 25 | export default { 26 | head() { 27 | return { 28 | title: "My page" 29 | } 30 | } 31 | } 32 | 33 | ``` 34 | 35 | ## :mag: Implementation 36 | 37 | - [Rule source](https://github.com/nuxt/eslint-plugin-nuxt/tree/master/lib/rules/require-func-head.js) 38 | - [Test source](https://github.com/nuxt/eslint-plugin-nuxt/tree/master/lib/rules/__tests__/require-func-head.test.js) 39 | -------------------------------------------------------------------------------- /docs/description/playwright_no-element-handle.md: -------------------------------------------------------------------------------- 1 | ## Disallow usage of element handles (`no-element-handle`) 2 | 3 | Disallow the creation of element handles with `page.$` or `page.$$`. 4 | 5 | ## Rule Details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```javascript 10 | // Element Handle 11 | const buttonHandle = await page.$('button') 12 | await buttonHandle.click() 13 | 14 | // Element Handles 15 | const linkHandles = await page.$$('a') 16 | ``` 17 | 18 | Example of **correct** code for this rule: 19 | 20 | ```javascript 21 | const buttonLocator = page.locator('button') 22 | await buttonLocator.click() 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/playwright_no-eval.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of `page.$eval` and `page.$$eval` (`no-eval`) 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```javascript 8 | const searchValue = await page.$eval('#search', (el) => el.value) 9 | 10 | const divCounts = await page.$$eval( 11 | 'div', 12 | (divs, min) => divs.length >= min, 13 | 10, 14 | ) 15 | 16 | await page.$eval('#search', (el) => el.value) 17 | await page.$$eval('#search', (el) => el.value) 18 | ``` 19 | 20 | Example of **correct** code for this rule: 21 | 22 | ```javascript 23 | await page.locator('button').evaluate((node) => node.innerText) 24 | await page.locator('div').evaluateAll((divs, min) => divs.length >= min, 10) 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/playwright_no-force-option.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of the `{ force: true }` option (`no-force-option`) 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```javascript 8 | await page.locator('button').click({ force: true }) 9 | await page.locator('check').check({ force: true }) 10 | await page.locator('input').fill('something', { force: true }) 11 | ``` 12 | 13 | Examples of **correct** code for this rule: 14 | 15 | ```javascript 16 | await page.locator('button').click() 17 | await page.locator('check').check() 18 | await page.locator('input').fill('something') 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/description/playwright_no-get-by-title.md: -------------------------------------------------------------------------------- 1 | ## Disallow using `getByTitle()` (`no-get-by-title`) 2 | 3 | The HTML `title` attribute does not provide a fully accessible tooltip for 4 | elements so relying on it to identify elements can hide accessibility issues in 5 | your code. This rule helps to prevent that by disallowing use of the 6 | `getByTitle` method. 7 | 8 | ## Rule Details 9 | 10 | Example of **incorrect** code for this rule: 11 | 12 | ```javascript 13 | await page.getByTitle('Delete product').click() 14 | ``` 15 | 16 | Example of **correct** code for this rule: 17 | 18 | ```javascript 19 | await page.getByRole('button', { name: 'Delete product' }).click() 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/description/playwright_no-nested-step.md: -------------------------------------------------------------------------------- 1 | # Disallow nested `test.step()` methods (`no-nested-step`) 2 | 3 | Nesting `test.step()` methods can make your tests difficult to read. 4 | 5 | ## Rule Details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```javascript 10 | test('foo', async () => { 11 | await test.step('step1', async () => { 12 | await test.step('nest step', async () => { 13 | await expect(true).toBe(true) 14 | }) 15 | }) 16 | }) 17 | ``` 18 | 19 | Examples of **correct** code for this rule: 20 | 21 | ```javascript 22 | test('foo', async () => { 23 | await test.step('step1', async () => { 24 | await expect(true).toBe(true) 25 | }) 26 | await test.step('step2', async () => { 27 | await expect(true).toBe(true) 28 | }) 29 | }) 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/description/playwright_no-networkidle.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of the `networkidle` option (`no-networkidle`) 2 | 3 | Using `networkidle` is discouraged in favor of using 4 | [web first assertions](https://playwright.dev/docs/best-practices#use-web-first-assertions). 5 | 6 | ## Rule Details 7 | 8 | Examples of **incorrect** code for this rule: 9 | 10 | ```javascript 11 | await page.waitForLoadState('networkidle') 12 | await page.waitForURL('...', { waitUntil: 'networkidle' }) 13 | await page.goto('...', { waitUntil: 'networkidle' }) 14 | ``` 15 | -------------------------------------------------------------------------------- /docs/description/playwright_no-nth-methods.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of `nth` methods (`no-nth-methods`) 2 | 3 | This rule prevents the usage of `nth` methods (`first()`, `last()`, and 4 | `nth()`). These methods can be prone to flakiness if the DOM structure changes. 5 | 6 | ## Rule Details 7 | 8 | Examples of **incorrect** code for this rule: 9 | 10 | ```javascript 11 | page.locator('button').first() 12 | page.locator('button').last() 13 | page.locator('button').nth(3) 14 | ``` 15 | -------------------------------------------------------------------------------- /docs/description/playwright_no-page-pause.md: -------------------------------------------------------------------------------- 1 | ## Disallow using `page.pause` (`no-page-pause`) 2 | 3 | Prevent usage of `page.pause()`. 4 | 5 | ## Rule Details 6 | 7 | Example of **incorrect** code for this rule: 8 | 9 | ```javascript 10 | await page.click('button') 11 | await page.pause() 12 | ``` 13 | 14 | Example of **correct** code for this rule: 15 | 16 | ```javascript 17 | await page.click('button') 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/description/playwright_no-useless-await.md: -------------------------------------------------------------------------------- 1 | # Disallow unnecessary `await`s for Playwright methods (`no-useless-await`) 2 | 3 | Some Playwright methods are frequently, yet incorrectly, awaited when the await 4 | expression has no effect. 5 | 6 | ## Rule Details 7 | 8 | Examples of **incorrect** code for this rule: 9 | 10 | ```javascript 11 | await page.locator('.my-element') 12 | await page.getByRole('.my-element') 13 | ``` 14 | 15 | Examples of **correct** code for this rule: 16 | 17 | ```javascript 18 | page.locator('.my-element') 19 | page.getByRole('.my-element') 20 | 21 | await page.$('.my-element') 22 | await page.goto('.my-element') 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/playwright_no-useless-not.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of `not` matchers when a specific matcher exists (`no-useless-not`) 2 | 3 | Several Playwright matchers are complimentary such as `toBeVisible`/`toBeHidden` 4 | and `toBeEnabled`/`toBeDisabled`. While the `not` variants of each of these 5 | matchers can be used, it's preferred to use the complimentary matcher instead. 6 | 7 | ## Rule Details 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```javascript 12 | expect(locator).not.toBeVisible() 13 | expect(locator).not.toBeHidden() 14 | expect(locator).not.toBeEnabled() 15 | expect(locator).not.toBeDisabled() 16 | ``` 17 | 18 | Example of **correct** code for this rule: 19 | 20 | ```javascript 21 | expect(locator).toBeHidden() 22 | expect(locator).toBeVisible() 23 | expect(locator).toBeDisabled() 24 | expect(locator).toBeEnabled() 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/playwright_no-wait-for-selector.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of `page.waitForSelector` (`no-wait-for-selector`) 2 | 3 | ## Rule Details 4 | 5 | Example of **incorrect** code for this rule: 6 | 7 | ```javascript 8 | await page.waitForSelector('#foo') 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```javascript 14 | await page.waitForLoadState() 15 | await page.waitForURL('/home') 16 | await page.waitForFunction(() => window.innerWidth < 100) 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/description/playwright_no-wait-for-timeout.md: -------------------------------------------------------------------------------- 1 | # Disallow usage of `page.waitForTimeout` (`no-wait-for-timeout`) 2 | 3 | ## Rule Details 4 | 5 | Example of **incorrect** code for this rule: 6 | 7 | ```javascript 8 | await page.waitForTimeout(5000) 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```javascript 14 | // Use signals such as network events, selectors becoming visible and others instead. 15 | await page.waitForLoadState() 16 | 17 | await page.waitForURL('/home') 18 | 19 | await page.waitForFunction(() => window.innerWidth < 100) 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/description/playwright_prefer-strict-equal.md: -------------------------------------------------------------------------------- 1 | # Suggest using `toStrictEqual()` (`prefer-strict-equal`) 2 | 3 | `toStrictEqual` not only checks that two objects contain the same data but also 4 | that they have the same structure. It is common to expect objects to not only 5 | have identical values but also to have identical keys. A stricter equality will 6 | catch cases where two objects do not have identical keys. 7 | 8 | ## Rule details 9 | 10 | This rule triggers a warning if `toEqual()` is used to assert equality. 11 | 12 | ### Default configuration 13 | 14 | The following pattern is considered warning: 15 | 16 | ```javascript 17 | expect({ a: 'a', b: undefined }).toEqual({ a: 'a' }) // true 18 | ``` 19 | 20 | The following pattern is not warning: 21 | 22 | ```javascript 23 | expect({ a: 'a', b: undefined }).toStrictEqual({ a: 'a' }) // false 24 | ``` 25 | -------------------------------------------------------------------------------- /docs/description/playwright_prefer-to-contain.md: -------------------------------------------------------------------------------- 1 | # Suggest using `toContain()` (`prefer-to-contain`) 2 | 3 | In order to have a better failure message, `toContain()` should be used upon 4 | asserting expectations on an array containing an object. 5 | 6 | ## Rule Details 7 | 8 | Example of **incorrect** code for this rule: 9 | 10 | ```javascript 11 | expect(a.includes(b)).toBe(true) 12 | expect(a.includes(b)).not.toBe(true) 13 | expect(a.includes(b)).toBe(false) 14 | expect(a.includes(b)).toEqual(true) 15 | expect(a.includes(b)).toStrictEqual(true) 16 | ``` 17 | 18 | Example of **correct** code for this rule: 19 | 20 | ```javascript 21 | expect(a).toContain(b) 22 | expect(a).not.toContain(b) 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/playwright_prefer-to-have-count.md: -------------------------------------------------------------------------------- 1 | # Suggest using `toHaveCount()` (`prefer-to-have-count`) 2 | 3 | In order to have a better failure message, `toHaveCount()` should be used upon 4 | asserting expectations on locators `count()` method. 5 | 6 | ## Rule details 7 | 8 | This rule triggers a warning if `toBe()`, `toEqual()` or `toStrictEqual()` is 9 | used to assert locators `count()` method. 10 | 11 | The following patterns are considered warnings: 12 | 13 | ```javascript 14 | expect(await files.count()).toBe(1) 15 | expect(await files.count()).toEqual(1) 16 | expect(await files.count()).toStrictEqual(1) 17 | ``` 18 | 19 | The following pattern is **not** a warning: 20 | 21 | ```javascript 22 | await expect(files).toHaveCount(1) 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/playwright_prefer-to-have-length.md: -------------------------------------------------------------------------------- 1 | # Suggest using `toHaveLength()` (`prefer-to-have-length`) 2 | 3 | In order to have a better failure message, `toHaveLength()` should be used upon 4 | asserting expectations on objects length property. 5 | 6 | ## Rule details 7 | 8 | This rule triggers a warning if `toBe()`, `toEqual()` or `toStrictEqual()` is 9 | used to assert objects length property. 10 | 11 | The following patterns are considered warnings: 12 | 13 | ```javascript 14 | expect(files.length).toBe(1) 15 | expect(files.length).toEqual(1) 16 | expect(files.length).toStrictEqual(1) 17 | ``` 18 | 19 | The following pattern is **not** a warning: 20 | 21 | ```javascript 22 | expect(files).toHaveLength(1) 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/promise_avoid-new.md: -------------------------------------------------------------------------------- 1 | # Avoid creating `new` promises outside of utility libs (use [pify][] instead) (avoid-new) 2 | 3 | [pify]: https://www.npmjs.com/package/pify 4 | -------------------------------------------------------------------------------- /docs/description/promise_no-multiple-resolved.md: -------------------------------------------------------------------------------- 1 | # Disallow creating new promises with paths that resolve multiple times (no-multiple-resolved) 2 | 3 | This rule warns of paths that resolve multiple times in executor functions that 4 | Promise constructors. 5 | 6 | #### Valid 7 | 8 | ```js 9 | new Promise((resolve, reject) => { 10 | fn((error, value) => { 11 | if (error) { 12 | reject(error) 13 | } else { 14 | resolve(value) 15 | } 16 | }) 17 | }) 18 | ``` 19 | 20 | #### Invalid 21 | 22 | ```js 23 | new Promise((resolve, reject) => { 24 | fn((error, value) => { 25 | if (error) { 26 | reject(error) 27 | } 28 | 29 | resolve(value) // Both `reject` and `resolve` may be called. 30 | }) 31 | }) 32 | ``` 33 | -------------------------------------------------------------------------------- /docs/description/promise_no-native.md: -------------------------------------------------------------------------------- 1 | # In an ES5 environment, make sure to create a `Promise` constructor before using (no-native) 2 | 3 | Ensure that `Promise` is included fresh in each file instead of relying on the 4 | existence of a native promise implementation. Helpful if you want to use 5 | `bluebird` or if you don't intend to use an ES6 Promise shim. 6 | 7 | #### Valid 8 | 9 | ```js 10 | var Promise = require('bluebird') 11 | var x = Promise.resolve('good') 12 | ``` 13 | 14 | #### Invalid 15 | 16 | ```js 17 | var x = Promise.resolve('bad') 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/description/promise_no-nesting.md: -------------------------------------------------------------------------------- 1 | # Avoid nested `then()` or `catch()` statements (no-nesting) 2 | 3 | #### Valid 4 | 5 | ```js 6 | myPromise.then(doSomething).then(doSomethingElse).catch(errors) 7 | ``` 8 | 9 | #### Invalid 10 | 11 | ```js 12 | myPromise.then((val) => doSomething(val).then(doSomethingElse)) 13 | 14 | myPromise.then((val) => doSomething(val).catch(errors)) 15 | 16 | myPromise.catch((err) => doSomething(err).then(doSomethingElse)) 17 | 18 | myPromise.catch((err) => doSomething(err).catch(errors)) 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/description/promise_no-promise-in-callback.md: -------------------------------------------------------------------------------- 1 | # Avoid using promises inside of callbacks (no-promise-in-callback) 2 | -------------------------------------------------------------------------------- /docs/description/promise_no-return-in-finally.md: -------------------------------------------------------------------------------- 1 | # Disallow return statements in `finally()` (no-return-in-finally) 2 | 3 | Disallow return statements inside a callback passed to `finally()`, since 4 | nothing would consume what's returned. 5 | 6 | #### Valid 7 | 8 | ```js 9 | myPromise.finally(function (val) { 10 | console.log('value:', val) 11 | }) 12 | ``` 13 | 14 | #### Invalid 15 | 16 | ```js 17 | myPromise.finally(function (val) { 18 | return val 19 | }) 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/description/promise_prefer-await-to-callbacks.md: -------------------------------------------------------------------------------- 1 | # Prefer async/await to the callback pattern (prefer-await-to-callbacks) 2 | -------------------------------------------------------------------------------- /docs/description/react-native-a11y_has-accessibility-hint.md: -------------------------------------------------------------------------------- 1 | # has-accessibility-hint 2 | 3 | An accessibility hint helps users understand what will happen when they perform an action on the accessibility element when that result is not apparent from the accessibility label. 4 | 5 | ### References 6 | 7 | 1. [React Native Docs - accessibilityHint (iOS, Android)](https://facebook.github.io/react-native/docs/accessibility#accessibilityhint-ios-android) 8 | 9 | ## Rule details 10 | 11 | This rule takes no arguments. 12 | 13 | ### Succeed 14 | ```jsx 15 | 16 | 17 | 18 | ``` 19 | 20 | ### Fail 21 | ```jsx 22 | 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/react-native-a11y_has-valid-accessibility-descriptors.md: -------------------------------------------------------------------------------- 1 | # has-valid-accessibility-descriptors 2 | 3 | Ensures that Touchable* components have appropriate props to communicate with assistive technologies. 4 | 5 | The rule will trigger when a Touchable* component does not have **any** of the following props:- 6 | 7 | - `accessibiltyRole` 8 | - `accessibilityLabel` 9 | - `accessibilityActions` 10 | 11 | In some cases, fixing this may then trigger other rules for related props (e.g. if you add `accessibilityActions` to fix this but are missing `onAccessibilityAction`) 12 | 13 | ## Rule details 14 | 15 | This rule takes no arguments. 16 | 17 | ### Succeed 18 | ```jsx 19 | 20 | Back 21 | 22 | ``` 23 | 24 | ### Fail 25 | ```jsx 26 | 27 | Back 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/description/react-native_no-raw-text.md: -------------------------------------------------------------------------------- 1 | # Detect raw text outside of Text component 2 | All strings in React Native should be wrapped with a Text component. 3 | 4 | ## Rule Details 5 | 6 | The following patterns are considered warnings: 7 | 8 | ```js 9 | some text 10 | ``` 11 | 12 | ```js 13 | const text = 'some text'; 14 | {`${text}`} 15 | ``` 16 | 17 | The following patterns are not considered warnings: 18 | 19 | ```js 20 | some text 21 | ``` 22 | 23 | ```js 24 | const text = 'some text'; 25 | {`${text}`} 26 | ``` 27 | 28 | #### This rule has an object option: 29 | 30 | - "skip" – allow to skip checking for the array of custom components 31 | -------------------------------------------------------------------------------- /docs/description/react-native_no-single-element-style-arrays.md: -------------------------------------------------------------------------------- 1 | # No Single Element Style Arrays are allowed 2 | 3 | These cause unnecessary re-renders as each time the array's identity changes. 4 | 5 | ## Rule Details 6 | 7 | The following pattern is not allowed: 8 | 9 | ```js 10 | 11 | ``` 12 | 13 | -------------------------------------------------------------------------------- /docs/description/react-perf_jsx-no-jsx-as-prop.md: -------------------------------------------------------------------------------- 1 | # Prevent JSX as JSX prop values (jsx-no-jsx-as-prop) 2 | 3 | Prevent JSX that are local to the current method from being used as values of JSX props 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```jsx 10 | } /> 11 | 12 | } /> 13 | 14 | } /> 15 | ``` 16 | 17 | The following patterns are not considered warnings: 18 | 19 | ```jsx 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/description/react-perf_jsx-no-new-array-as-prop.md: -------------------------------------------------------------------------------- 1 | # Prevent `[...]` as JSX prop values (jsx-no-new-array-as-prop) 2 | 3 | Prevent Arrays that are local to the current method from being used as values of JSX props 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```jsx 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | ``` 20 | 21 | The following patterns are not considered warnings: 22 | 23 | ```jsx 24 | 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/react-perf_jsx-no-new-function-as-prop.md: -------------------------------------------------------------------------------- 1 | # Prevent `function` as JSX prop values (jsx-no-new-function-as-prop) 2 | 3 | Prevent Functions that are local to the current method from being used as values of JSX props 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```jsx 10 | 11 | 12 | {}} /> 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | ``` 22 | 23 | The following patterns are not considered warnings: 24 | 25 | ```jsx 26 | 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/description/react-perf_jsx-no-new-object-as-prop.md: -------------------------------------------------------------------------------- 1 | # Prevent `{...}` as JSX prop values (jsx-no-new-object-as-prop) 2 | 3 | Prevent Objects that are local to the current method from being used as values of JSX props 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered warnings: 8 | 9 | ```jsx 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | ``` 22 | 23 | The following patterns are not considered warnings: 24 | 25 | ```jsx 26 | 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/description/react-redux_prefer-separate-component-file.md: -------------------------------------------------------------------------------- 1 | # Enforces that all connected components are defined in a separate file (react-redux/prefer-separate-component-file) 2 | 3 | And imports it to the container. 4 | 5 | ## Rule details 6 | 7 | The following pattern is considered incorrect: 8 | 9 | ```js 10 | const Component = () => {}; 11 | connect(mapStateToProps, null)(Component) 12 | ``` 13 | 14 | The following patterns are considered correct: 15 | 16 | ```js 17 | import Component from './component'; 18 | connect(mapStateToProps, mapDispatchToProps)(Component) 19 | ``` 20 | 21 | ```js 22 | const Component = require('./component') 23 | connect(mapStateToProps, mapDispatchToProps)(Component) 24 | ``` 25 | -------------------------------------------------------------------------------- /docs/description/react_no-namespace.md: -------------------------------------------------------------------------------- 1 | # Enforce that namespaces are not used in React elements (`react/no-namespace`) 2 | 3 | 4 | 5 | Enforces the absence of a namespace in React elements, such as with `svg:circle`, as they are not supported in React. 6 | 7 | ## Rule Details 8 | 9 | The following patterns are considered warnings: 10 | 11 | ```jsx 12 | 13 | ``` 14 | 15 | ```jsx 16 | 17 | ``` 18 | 19 | The following patterns are **not** considered warnings: 20 | 21 | ```jsx 22 | 23 | ``` 24 | 25 | ```jsx 26 | 27 | ``` 28 | 29 | ## When Not To Use It 30 | 31 | If you are not using React. 32 | -------------------------------------------------------------------------------- /docs/description/redux-saga_no-unhandled-errors.md: -------------------------------------------------------------------------------- 1 | # Ensures error handling on sagas 2 | 3 | ![](https://img.shields.io/badge/-recommended-lightgrey.svg "recommended") 4 | 5 | This rule ensures that all `redux-saga` effects are inside a try/catch block for error handling. 6 | 7 | An uncaught error can cause all other sagas waiting to complete to be inadvertedly canceled. 8 | 9 | ```es6 10 | import { call } from "redux-saga" 11 | 12 | // good 13 | function* good() { 14 | try { 15 | yield call(action) 16 | } catch (error) { 17 | yield call(handleError, error) 18 | } 19 | } 20 | 21 | // bad 22 | function* bad() { 23 | call(action) 24 | } 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/rxjs-angular_prefer-async-pipe.md: -------------------------------------------------------------------------------- 1 | # Use container components and async pipe (`prefer-async-pipe`) 2 | 3 | This rule effects failures if explicit calls to `subscribe` are made within a component. Instead, use a child component to which a value is passed by using the async pipe in the parent component's template. 4 | 5 | ## Options 6 | 7 | This rule has no options. 8 | 9 | ## Further reading 10 | 11 | - [Connecting Components with Reactive Forms](https://ncjamieson.com/connecting-components-with-reactive-forms/) 12 | -------------------------------------------------------------------------------- /docs/description/rxjs_ban-observables.md: -------------------------------------------------------------------------------- 1 | # Avoid banned observable creators (`ban-observables`) 2 | 3 | This rule can be configured so that developers can ban any observable creators they want to avoid in their project. 4 | 5 | ## Options 6 | 7 | This rule accepts a single option which is an object the keys of which are the names of observable factory functions and the values are either booleans or strings containing the explanation for the ban. 8 | 9 | The following configuration bans `partition` and `onErrorResumeNext`: 10 | 11 | ```json 12 | { 13 | "rxjs/ban-observables": [ 14 | "error", 15 | { 16 | "partition": true, 17 | "of": false, 18 | "onErrorResumeNext": "What is this? Visual Basic?" 19 | } 20 | ] 21 | } 22 | ``` -------------------------------------------------------------------------------- /docs/description/rxjs_ban-operators.md: -------------------------------------------------------------------------------- 1 | # Avoid banned operators (`ban-operators`) 2 | 3 | This rule can be configured so that developers can ban any operators they want to avoid in their project. 4 | 5 | ## Options 6 | 7 | This rule accepts a single option which is an object the keys of which are the names of operators and the values are either booleans or strings containing the explanation for the ban. 8 | 9 | The following configuration bans `partition` and `onErrorResumeNext`: 10 | 11 | ```json 12 | { 13 | "rxjs/ban-operators": [ 14 | "error", 15 | { 16 | "partition": true, 17 | "map": false, 18 | "onErrorResumeNext": "What is this? Visual Basic?" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /docs/description/rxjs_just.md: -------------------------------------------------------------------------------- 1 | # Use `just` instead of `of` (`just`) 2 | 3 | This rule enforces the use of `just` instead of `of`. Some other languages with Rx implementations use the former and this rule is for developers who have that preference. 4 | 5 | ## Options 6 | 7 | This rule has no options. 8 | 9 | ## Further reading 10 | 11 | - [Rename `of` to `just`](https://github.com/ReactiveX/rxjs/issues/3747) -------------------------------------------------------------------------------- /docs/description/rxjs_macro.md: -------------------------------------------------------------------------------- 1 | # Use the RxJS Tools macro (`macro`) 2 | 3 | This rule ensures that modules that import `rxjs` also import the Babel macro for [RxJS Tools](https://rxjs.tools). 4 | 5 | ## Options 6 | 7 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-async-subscribe.md: -------------------------------------------------------------------------------- 1 | # Avoid passing async functions to `subscribe` (`no-async-subscribe`) 2 | 3 | This rule effects failures if async functions are passed to `subscribe`. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { of } from "rxjs"; 11 | of(42).subscribe(async () => console.log(value)); 12 | ``` 13 | 14 | Examples of **correct** code for this rule: 15 | 16 | ```ts 17 | import { of } from "rxjs"; 18 | of(42).subscribe(() => console.log(value)); 19 | ``` 20 | 21 | ## Options 22 | 23 | This rule has no options. 24 | -------------------------------------------------------------------------------- /docs/description/rxjs_no-compat.md: -------------------------------------------------------------------------------- 1 | # Avoid the `rxjs-compat` package (`no-compat`) 2 | 3 | This rule prevents the use of `rxjs-compat`. 4 | 5 | ## Options 6 | 7 | This rule has no options. 8 | 9 | ## Further reading 10 | 11 | - [Backwards compatibility](https://github.com/ReactiveX/rxjs/blob/a6590e971969c736a15b77154dabbc22275aa0d5/docs_app/content/guide/v6/migration.md#backwards-compatibility) -------------------------------------------------------------------------------- /docs/description/rxjs_no-connectable.md: -------------------------------------------------------------------------------- 1 | # Avoid connectable observables (`no-connectable`) 2 | 3 | This rule prevents the use of connectable observables. 4 | 5 | ## Options 6 | 7 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-create.md: -------------------------------------------------------------------------------- 1 | # Avoid the static `create` function (`no-create`) 2 | 3 | This rule prevents the use of the static `create` function in `Observable`. Developers should use `new` and the constructor instead. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | const answers = Observable.create(subscriber => { 11 | subscriber.next(42); 12 | subscriber.next(54); 13 | subscriber.complete(); 14 | }); 15 | ``` 16 | 17 | Examples of **correct** code for this rule: 18 | 19 | ```ts 20 | const answers = new Observable(subscriber => { 21 | subscriber.next(42); 22 | subscriber.next(54); 23 | subscriber.complete(); 24 | }); 25 | ``` 26 | 27 | ## Options 28 | 29 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-explicit-generics.md: -------------------------------------------------------------------------------- 1 | # Avoid unnecessary explicit type arguments (`no-explicit-generics`) 2 | 3 | This rule prevents the use of explicit type arguments when the type arguments can be inferred. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { BehaviorSubject } from "rxjs"; 11 | const subject = new BehaviorSubject(42); 12 | ``` 13 | 14 | Examples of **correct** code for this rule: 15 | 16 | ```ts 17 | import { BehaviorSubject } from "rxjs"; 18 | const subject = new BehaviorSubject(42); 19 | ``` 20 | 21 | ## Options 22 | 23 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-finnish.md: -------------------------------------------------------------------------------- 1 | # Avoid Finnish notation (`no-finnish`) 2 | 3 | This rule prevents the use of Finnish notation. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | const answer$ = of(42, 54); 11 | ``` 12 | 13 | Examples of **correct** code for this rule: 14 | 15 | ```ts 16 | const answers = of(42, 54); 17 | ``` 18 | 19 | ## Options 20 | 21 | This rule has no options. 22 | 23 | ## Further reading 24 | 25 | - [Observables and Finnish Notation](https://medium.com/@benlesh/observables-and-finnish-notation-df8356ed1c9b) -------------------------------------------------------------------------------- /docs/description/rxjs_no-ignored-error.md: -------------------------------------------------------------------------------- 1 | # Enforce the passing of error handlers (`no-ignored-error`) 2 | 3 | This rule enforces the passing of an error handler to `subscribe` calls. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | source.subscribe((value) => console.log(value)); 11 | ``` 12 | 13 | ```ts 14 | source.subscribe({ 15 | next: (value) => console.log(value) 16 | }); 17 | ``` 18 | 19 | Examples of **correct** code for this rule: 20 | 21 | ```ts 22 | source.subscribe( 23 | (value) => console.log(value), 24 | (error) => console.error(error) 25 | ); 26 | ``` 27 | 28 | ```ts 29 | source.subscribe({ 30 | next: (value) => console.log(value), 31 | error: (error) => console.error(error) 32 | }); 33 | ``` 34 | 35 | ## Options 36 | 37 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-ignored-notifier.md: -------------------------------------------------------------------------------- 1 | # Ensure `repeatWhen` or `retryWhen` notifiers are used (`no-ignored-notifier`) 2 | 3 | This rule effects failures if the notifier passed to a `repeatWhen` or `retryWhen` callback is not used. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { range } from "rxjs"; 11 | import { repeatWhen, take } from "rxjs/operators"; 12 | 13 | const repeating = source.pipe( 14 | repeatWhen(notifications => range(0, 3)) 15 | ); 16 | ``` 17 | 18 | Examples of **correct** code for this rule: 19 | 20 | ```ts 21 | import { repeatWhen, take } from "rxjs/operators"; 22 | 23 | const repeating = source.pipe( 24 | repeatWhen(notifications => notifications.pipe(take(3))) 25 | ); 26 | ``` 27 | 28 | ## Options 29 | 30 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-ignored-observable.md: -------------------------------------------------------------------------------- 1 | # Use returned observables (`no-ignored-observable`) 2 | 3 | The effects failures if an observable returned by a function is neither assigned to a variable or property or passed to a function. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { of } from "rxjs"; 11 | of(42, 54); 12 | ``` 13 | 14 | Examples of **correct** code for this rule: 15 | 16 | ```ts 17 | import { of } from "rxjs"; 18 | const answers = of(42, 54); 19 | ``` 20 | 21 | ## Options 22 | 23 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-ignored-replay-buffer.md: -------------------------------------------------------------------------------- 1 | # Avoid unbounded replay buffers (`no-ignored-replay-buffer`) 2 | 3 | This rule effects failures if the buffer size of a replay buffer is not explicitly specified. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { ReplaySubject } from "rxjs"; 11 | const subject = new ReplaySubject(); 12 | ``` 13 | 14 | Examples of **correct** code for this rule: 15 | 16 | ```ts 17 | import { ReplaySubject } from "rxjs"; 18 | const subject = new ReplaySubject(1); 19 | ``` 20 | 21 | ```ts 22 | import { ReplaySubject } from "rxjs"; 23 | const subject = new ReplaySubject(Infinity); 24 | ``` 25 | 26 | ## Options 27 | 28 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-ignored-subscribe.md: -------------------------------------------------------------------------------- 1 | # Enforce the passing of handlers to `subscribe` (`no-ignored-subscribe`) 2 | 3 | This rule effects failures whenever `subscribe` is called without handlers. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { of } from "rxjs"; 11 | import { tap } from "rxjs/operators"; 12 | 13 | of(42, 54).pipe( 14 | tap((value) => console.log(value)) 15 | ).subscribe(); 16 | ``` 17 | 18 | Examples of **correct** code for this rule: 19 | 20 | ```ts 21 | import { of } from "rxjs"; 22 | 23 | of(42, 54).subscribe((value) => console.log(value)); 24 | ``` 25 | 26 | ## Options 27 | 28 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-ignored-takewhile-value.md: -------------------------------------------------------------------------------- 1 | # Avoid unused `takeWhile` values (`no-ignored-takewhile-value`) 2 | 3 | This rule effects failures if the value received by a `takeWhile` callback is not used in an expression. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { takeWhile } from "rxjs/operators"; 11 | 12 | let flag = true; 13 | const whilst = source.pipe(takeWhile(() => flag)); 14 | ``` 15 | 16 | Examples of **correct** code for this rule: 17 | 18 | ```ts 19 | import { takeWhile } from "rxjs/operators"; 20 | 21 | const whilst = source.pipe(takeWhile(value => value)); 22 | ``` 23 | 24 | ## Options 25 | 26 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-index.md: -------------------------------------------------------------------------------- 1 | # Avoid importing index modules (`no-index`) 2 | 3 | This rule effects failures if an index module is specified as the import location. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { of } from "rxjs/index"; 11 | ``` 12 | 13 | Examples of **correct** code for this rule: 14 | 15 | ```ts 16 | import { of } from "rxjs"; 17 | ``` 18 | 19 | ## Options 20 | 21 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-internal.md: -------------------------------------------------------------------------------- 1 | # Avoid importing internal modules (`no-internal`) 2 | 3 | This rule effects failures if an internal module is specified as the import location. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { of } from "rxjs/internal/observable/of"; 11 | ``` 12 | 13 | Examples of **correct** code for this rule: 14 | 15 | ```ts 16 | import { of } from "rxjs"; 17 | ``` 18 | 19 | ## Options 20 | 21 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-nested-subscribe.md: -------------------------------------------------------------------------------- 1 | # Avoid nested `subscribe` calls (`no-nested-subscribe`) 2 | 3 | This rule effects failures if `subscribe` is called within a `subscribe` handler. 4 | 5 | ## Rule details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```ts 10 | import { of, timer } from "rxjs"; 11 | 12 | of(42, 54).subscribe((value) => { 13 | timer(1e3).subscribe(() => console.log(value)); 14 | }); 15 | ``` 16 | 17 | Examples of **correct** code for this rule: 18 | 19 | ```ts 20 | import { of, timer } from "rxjs"; 21 | import { mapTo, mergeMap } from "rxjs/operators"; 22 | 23 | of(42, 54).pipe( 24 | mergeMap((value) => timer(1e3).pipe(mapTo(value))) 25 | ).subscribe((value) => console.log(value)); 26 | ``` 27 | 28 | ## Options 29 | 30 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-sharereplay.md: -------------------------------------------------------------------------------- 1 | # Avoid `shareReplay` (`no-sharereplay`) 2 | 3 | This rule effects failures if the `shareReplay` operator is used - or if it is used without specifying a `config` argument. 4 | 5 | The behaviour of `shareReplay` has changed several times - see the blog post linked below. 6 | 7 | ## Options 8 | 9 | This rule accepts a single option which is an object with an `allowConfig` property that that determines whether `shareReplay` is allow if a config argument is specified. By default, `allowConfig` is `true`. 10 | 11 | ```json 12 | { 13 | "rxjs/no-sharereplay": [ 14 | "error", 15 | { "allowConfig": true } 16 | ] 17 | } 18 | ``` 19 | 20 | ## Further reading 21 | 22 | - [What's changed with shareReplay](https://ncjamieson.com/whats-changed-with-sharereplay/) -------------------------------------------------------------------------------- /docs/description/rxjs_no-subclass.md: -------------------------------------------------------------------------------- 1 | # Avoid subclassing RxJS classes (`no-subclass`) 2 | 3 | This rule effects failures if an RxJS class is subclassed. Developers are encouraged to avoid subclassing RxJS classes, as some public and protected implementation details might change in the future. 4 | 5 | ## Options 6 | 7 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-subject-unsubscribe.md: -------------------------------------------------------------------------------- 1 | # Avoid calling `unsubscribe` on subjects (`no-subject-unsubscribe`) 2 | 3 | This rule effects failures if the `unsubscribe` method is called on subjects. The method behaves differently to the `unsubsribe` method on subscriptions and is often an error. 4 | 5 | ## Options 6 | 7 | This rule has no options. 8 | 9 | ## Further reading 10 | 11 | - [Closed Subjects](https://ncjamieson.com/closed-subjects/) -------------------------------------------------------------------------------- /docs/description/rxjs_no-subject-value.md: -------------------------------------------------------------------------------- 1 | # Avoid using a behavior subject's value (`no-subject-value`) 2 | 3 | This rule effects an error if the `value` property - or `getValue` method - of a `BehaviorSubject` is used. 4 | 5 | ## Options 6 | 7 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-tap.md: -------------------------------------------------------------------------------- 1 | # Avoid `tap` (`no-tap`) 2 | 3 | This rule effects failures if the `tap` operator is used. 4 | 5 | ## Options 6 | 7 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-topromise.md: -------------------------------------------------------------------------------- 1 | # Avoid `toPromise` (`no-topromise`) 2 | 3 | This rule effects failures if the `toPromise` method is used. 4 | 5 | ## Options 6 | 7 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/rxjs_no-unsafe-first.md: -------------------------------------------------------------------------------- 1 | # Avoid completing effects and epics (`no-unsafe-first`) 2 | 3 | This rule effects failures if `first` is used in an effect or epic in a manner that will complete the outermost observable. 4 | 5 | ## Options 6 | 7 | This rule accepts a single option which is an object with an `observable` property that is a regular expression used to match an effect or epic's actions observable. The default `observable` regular expression should match most effect and epic action sources. 8 | 9 | ```json 10 | { 11 | "rxjs/no-unsafe-first": [ 12 | "error", 13 | { "observable": "[Aa]ction(s|s\\$|\\$)$" } 14 | ] 15 | } 16 | ``` -------------------------------------------------------------------------------- /docs/description/rxjs_no-unsafe-subject-next.md: -------------------------------------------------------------------------------- 1 | # Avoid passing `undefined` to `next` (`no-unsafe-subject-next`) 2 | 3 | This rule effects failures if `next` is called without an argument and the subject's value type is not `void`. 4 | 5 | In RxJS version 6, the `next` method's `value` parameter is optional, but a value should always be specified for subjects with non-`void` element types. 6 | 7 | ## Rule details 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```ts 12 | const subject = new Subject(); 13 | subject.next(); 14 | ``` 15 | 16 | Examples of **correct** code for this rule: 17 | 18 | ```ts 19 | const subject = new Subject(); 20 | subject.next(); 21 | ``` 22 | 23 | ```ts 24 | const subject = new Subject(); 25 | subject.next(0); 26 | ``` 27 | 28 | ## Options 29 | 30 | This rule has no options. -------------------------------------------------------------------------------- /docs/description/security-node_detect-possible-timing-attacks.md: -------------------------------------------------------------------------------- 1 | # detect possible timing attacks (detect-possible-timing-attacks) 2 | 3 | Please describe the origin of the rule here. 4 | 5 | 6 | ## Rule Details 7 | 8 | This rule aims to... 9 | 10 | Examples of **incorrect** code for this rule: 11 | 12 | ```js 13 | 14 | // fill me in 15 | 16 | ``` 17 | 18 | Examples of **correct** code for this rule: 19 | 20 | ```js 21 | 22 | // fill me in 23 | 24 | ``` 25 | 26 | ### Options 27 | 28 | If there are any options, describe them here. Otherwise, delete this section. 29 | 30 | ## When Not To Use It 31 | 32 | Give a short description of when it would be appropriate to turn off this rule. 33 | 34 | ## Further Reading 35 | 36 | If there are other links that describe the issue this rule addresses, please include them here in a bulleted list. 37 | -------------------------------------------------------------------------------- /docs/description/security_detect-buffer-noassert.md: -------------------------------------------------------------------------------- 1 | # Detects calls to "buffer" with "noAssert" flag set (`security/detect-buffer-noassert`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | Detect calls to [`buffer`](https://nodejs.org/api/buffer.html) with `noAssert` flag set. 8 | 9 | From the Node.js API docs: "Setting `noAssert` to true skips validation of the `offset`. This allows the `offset` to be beyond the end of the `Buffer`." 10 | -------------------------------------------------------------------------------- /docs/description/security_detect-child-process.md: -------------------------------------------------------------------------------- 1 | # Detects instances of "child_process" & non-literal "exec()" calls (`security/detect-child-process`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | Detect instances of [`child_process`](https://nodejs.org/api/child_process.html) & non-literal [`exec()`](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback) 8 | 9 | More information: [Avoiding Command Injection in Node.js](https://github.com/eslint-community/eslint-plugin-security/tree/main/docs/avoid-command-injection-node.md) 10 | -------------------------------------------------------------------------------- /docs/description/security_detect-disable-mustache-escape.md: -------------------------------------------------------------------------------- 1 | # Detects "object.escapeMarkup = false", which can be used with some template engines to disable escaping of HTML entities (`security/detect-disable-mustache-escape`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | This can lead to Cross-Site Scripting (XSS) vulnerabilities. 8 | 9 | More information: [OWASP XSS]() 10 | -------------------------------------------------------------------------------- /docs/description/security_detect-eval-with-expression.md: -------------------------------------------------------------------------------- 1 | # Detects "eval(variable)" which can allow an attacker to run arbitrary code inside your process (`security/detect-eval-with-expression`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | More information: [What are the security issues with eval in JavaScript?](http://security.stackexchange.com/questions/94017/what-are-the-security-issues-with-eval-in-javascript) 8 | -------------------------------------------------------------------------------- /docs/description/security_detect-new-buffer.md: -------------------------------------------------------------------------------- 1 | # Detects instances of new Buffer(argument) where argument is any non-literal value (`security/detect-new-buffer`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | `new Buffer()` now emits a deprecation warning in Node.js. 8 | 9 | More information: [new Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) 10 | -------------------------------------------------------------------------------- /docs/description/security_detect-no-csrf-before-method-override.md: -------------------------------------------------------------------------------- 1 | # Detects Express "csrf" middleware setup before "method-override" middleware (`security/detect-no-csrf-before-method-override`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | This can allow `GET` requests (which are not checked by `csrf`) to turn into `POST` requests later. 8 | 9 | More information: [Bypass Connect CSRF protection by abusing methodOverride Middleware](https://github.com/eslint-community/eslint-plugin-security/tree/main/docs/bypass-connect-csrf-protection-by-abusing.md) 10 | -------------------------------------------------------------------------------- /docs/description/security_detect-non-literal-fs-filename.md: -------------------------------------------------------------------------------- 1 | # Detects variable in filename argument of "fs" calls, which might allow an attacker to access anything on your system (`security/detect-non-literal-fs-filename`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | More information: [OWASP Path Traversal](https://www.owasp.org/index.php/Path_Traversal) 8 | -------------------------------------------------------------------------------- /docs/description/security_detect-non-literal-regexp.md: -------------------------------------------------------------------------------- 1 | # Detects "RegExp(variable)", which might allow an attacker to DOS your server with a long-running regular expression (`security/detect-non-literal-regexp`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | More information: [Regular Expression DoS and Node.js](https://github.com/eslint-community/eslint-plugin-security/tree/main/docs/regular-expression-dos-and-node.md) 8 | -------------------------------------------------------------------------------- /docs/description/security_detect-non-literal-require.md: -------------------------------------------------------------------------------- 1 | # Detects "require(variable)", which might allow an attacker to load and run arbitrary code, or access arbitrary files on disk (`security/detect-non-literal-require`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | More information: [Where does Node.js and require look for modules?](http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm) 8 | -------------------------------------------------------------------------------- /docs/description/security_detect-possible-timing-attacks.md: -------------------------------------------------------------------------------- 1 | # Detects insecure comparisons (`==`, `!=`, `!==` and `===`), which check input sequentially (`security/detect-possible-timing-attacks`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/description/security_detect-pseudoRandomBytes.md: -------------------------------------------------------------------------------- 1 | # Detects if "pseudoRandomBytes()" is in use, which might not give you the randomness you need and expect (`security/detect-pseudoRandomBytes`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/description/security_detect-unsafe-regex.md: -------------------------------------------------------------------------------- 1 | # Detects potentially unsafe regular expressions, which may take a very long time to run, blocking the event loop (`security/detect-unsafe-regex`) 2 | 3 | ⚠️ This rule _warns_ in the ✅ `recommended` config. 4 | 5 | 6 | 7 | More information: [Regular Expression DoS and Node.js](https://github.com/eslint-community/eslint-plugin-security/tree/main/docs/regular-expression-dos-and-node.md) 8 | -------------------------------------------------------------------------------- /docs/description/sonarjs_cognitive-complexity.md: -------------------------------------------------------------------------------- 1 | # cognitive-complexity 2 | 3 | Cognitive Complexity is a measure of how hard the control flow of a function is to understand. Functions with high Cognitive Complexity will be difficult to maintain. 4 | 5 | ## See 6 | 7 | - [Cognitive Complexity](https://www.sonarsource.com/resources/cognitive-complexity/) 8 | 9 | ## Configuration 10 | 11 | The maximum authorized complexity can be provided. Default is 15. 12 | 13 | ```json 14 | { 15 | "sonarjs/cognitive-complexity": "error", 16 | "sonarjs/cognitive-complexity": ["error", 15] 17 | } 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/description/sonarjs_max-switch-cases.md: -------------------------------------------------------------------------------- 1 | ## max-switch-cases 2 | 3 | When `switch` statements have large sets of `case` clauses, it is usually an attempt to map two sets of data. A real map structure would be more readable and maintainable, and should be used instead. 4 | 5 | ## Configuration 6 | 7 | This rule has a numeric option (defaulted to 30) to specify the maximum number of switch cases. 8 | 9 | ```json 10 | { 11 | "max-switch-cases": "error", 12 | "max-switch-cases": ["error", 10] 13 | } 14 | ``` 15 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-collapsible-if.md: -------------------------------------------------------------------------------- 1 | # no-collapsible-if 2 | 3 | Merging collapsible if statements increases the code's readability. 4 | 5 | ## Noncompliant Code Example 6 | 7 | ```javascript 8 | if (x != undefined) { 9 | if (y === 2) { 10 | // ... 11 | } 12 | } 13 | ``` 14 | 15 | ## Compliant Solution 16 | 17 | ```javascript 18 | if (x != undefined && y === 2) { 19 | // ... 20 | } 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-element-overwrite.md: -------------------------------------------------------------------------------- 1 | # no-element-overwrite 2 | 3 | It is highly suspicious when a value is saved for a key or index and then unconditionally overwritten. Such replacements are likely in error. 4 | 5 | ## Noncompliant Code Example 6 | 7 | ```javascript 8 | fruits[1] = 'banana'; 9 | fruits[1] = 'apple'; // Noncompliant - value on index 1 is overwritten 10 | 11 | myMap.set('key', 1); 12 | myMap.set('key', 2); // Noncompliant - value for key "key" is replaced 13 | 14 | mySet.add(1); 15 | mySet.add(1); // Noncompliant - element is already in the set 16 | ``` 17 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-empty-collection.md: -------------------------------------------------------------------------------- 1 | # no-empty-collection 2 | 3 | When a collection is empty it makes no sense to access or iterate it. Doing so anyway is surely an error; either population was accidentally omitted or the developer doesn’t understand the situation. 4 | 5 | ## Noncompliant Code Example 6 | 7 | ```javascript 8 | let strings = []; 9 | 10 | if (strings.includes('foo')) {} // Noncompliant 11 | 12 | for (str of strings) {} // Noncompliant 13 | 14 | strings.forEach(str => doSomething(str)); // Noncompliant 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-extra-arguments.md: -------------------------------------------------------------------------------- 1 | # no-extra-arguments 2 | 3 | You can easily call a JavaScript function with more arguments than the function needs, but the extra arguments will be just ignored by function execution. 4 | 5 | ## Noncompliant Code Example 6 | 7 | ```javascript 8 | function say(a, b) { 9 | print(a + ' ' + b); 10 | } 11 | 12 | say('hello', 'world', '!'); // Noncompliant; last argument is not used 13 | ``` 14 | 15 | ## Exceptions 16 | 17 | No issue is reported when `arguments` is used in the body of the function being called. 18 | 19 | ```javascript 20 | function doSomething(a, b) { 21 | compute(arguments); 22 | } 23 | 24 | doSomething(1, 2, 3); // Compliant 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-inverted-boolean-check.md: -------------------------------------------------------------------------------- 1 | # no-inverted-boolean-check 2 | 3 | :wrench: _fixable_ 4 | 5 | It is needlessly complex to invert the result of a boolean comparison. The opposite comparison should be made instead. 6 | 7 | ## Noncompliant Code Example 8 | 9 | ```javascript 10 | if (!(a === 2)) { // Noncompliant 11 | //... 12 | } 13 | ``` 14 | 15 | ## Compliant Solution 16 | 17 | ```javascript 18 | if (a !== 2) { 19 | //... 20 | } 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-redundant-boolean.md: -------------------------------------------------------------------------------- 1 | # no-redundant-boolean 2 | 3 | Redundant Boolean literals should be removed from expressions to improve readability. 4 | 5 | ## Noncompliant Code Example 6 | 7 | ```javascript 8 | if (booleanMethod() == true) { /* ... */ } 9 | if (booleanMethod() == false) { /* ... */ } 10 | if (booleanMethod() || false) { /* ... */ } 11 | doSomething(!false); 12 | doSomething(booleanMethod() == true); 13 | ``` 14 | 15 | ## Compliant Solution 16 | 17 | ```javascript 18 | if (booleanMethod()) { /* ... */ } 19 | if (!booleanMethod()) { /* ... */ } 20 | if (booleanMethod()) { /* ... */ } 21 | doSomething(true); 22 | doSomething(booleanMethod()); 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-unused-collection.md: -------------------------------------------------------------------------------- 1 | # no-unused-collection 2 | 3 | When a collection is populated but its contents are never used, then it is surely some kind of mistake. Either refactoring has rendered the collection moot, or an access is missing. 4 | 5 | This rule raises an issue when no methods are called on a collection other than those that add or remove values. 6 | 7 | ## Noncompliant Code Example 8 | 9 | ```javascript 10 | function getLength(a, b, c) { 11 | const strings = []; // Noncompliant 12 | strings.push(a); 13 | strings.push(b); 14 | strings.push(c); 15 | 16 | return a.length + b.length + c.length; 17 | } 18 | ``` 19 | 20 | ## Compliant Solution 21 | 22 | ```javascript 23 | function getLength(a, b, c) { 24 | return a.length + b.length + c.length; 25 | } 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-use-of-empty-return-value.md: -------------------------------------------------------------------------------- 1 | # no-use-of-empty-return-value 2 | 3 | If a function does not return anything, it makes no sense to use its output. Specifically, passing it to another function, or assigning its "result" to a variable is probably a bug because such functions return `undefined`, which is probably not what was intended. 4 | 5 | ## Noncompliant Code Example 6 | 7 | ```javascript 8 | function foo() { 9 | console.log('Hello, World!'); 10 | } 11 | 12 | a = foo(); 13 | ``` 14 | 15 | ## Compliant Solution 16 | 17 | ```javascript 18 | function foo() { 19 | console.log('Hello, World!'); 20 | } 21 | 22 | foo(); 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/sonarjs_no-useless-catch.md: -------------------------------------------------------------------------------- 1 | # no-useless-catch 2 | 3 | A catch clause that only rethrows the caught exception has the same effect as omitting the catch altogether and letting it bubble up automatically, but with more code and the additional detriment of leaving maintainers scratching their heads. 4 | 5 | Such clauses should either be eliminated or populated with the appropriate logic. 6 | 7 | ## Noncompliant Code Example 8 | 9 | ```javascript 10 | try { 11 | doSomething(); 12 | } catch (ex) { // Noncompliant 13 | throw ex; 14 | } 15 | ``` 16 | 17 | ## Compliant Solution 18 | 19 | ```javascript 20 | try { 21 | doSomething(); 22 | } catch (ex) { 23 | console.err(ex); 24 | throw ex; 25 | } 26 | ``` 27 | 28 | or 29 | 30 | ```javascript 31 | doSomething(); 32 | ``` 33 | -------------------------------------------------------------------------------- /docs/description/sonarjs_prefer-object-literal.md: -------------------------------------------------------------------------------- 1 | # prefer-object-literal 2 | 3 | Object literal syntax, which initializes an object's properties inside the object declaration is cleaner and clearer than the alternative: creating an empty object, and then giving it properties one by one. 4 | 5 | An issue is raised when the following pattern is met: 6 | 7 | - An empty object is created. 8 | - A consecutive single-line statement adds a property to the created object. 9 | 10 | ## Noncompliant Code Example 11 | 12 | ```javascript 13 | var person = {}; // Noncompliant 14 | person.firstName = 'John'; 15 | person.middleInitial = 'Q'; 16 | person.lastName = 'Public'; 17 | ``` 18 | 19 | ## Compliant Solution 20 | 21 | ```javascript 22 | var person = { 23 | firstName: 'John', 24 | middleInitial: 'Q', 25 | lastName: 'Public', 26 | }; 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/description/sonarjs_prefer-single-boolean-return.md: -------------------------------------------------------------------------------- 1 | # prefer-single-boolean-return 2 | 3 | :wrench: _fixable_ 4 | 5 | Return of boolean literal statements wrapped into `if-then-else` flow should be simplified. 6 | 7 | ## Noncompliant Code Example 8 | 9 | ```javascript 10 | if (expression) { 11 | return true; 12 | } else { 13 | return false; 14 | } 15 | ``` 16 | 17 | or 18 | 19 | ```javascript 20 | if (expression) { 21 | return true; 22 | } 23 | return false; 24 | ``` 25 | 26 | ## Compliant Solution 27 | 28 | ```javascript 29 | return expression; 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/description/sonarjs_prefer-while.md: -------------------------------------------------------------------------------- 1 | # prefer-while 2 | 3 | :wrench: _fixable_ 4 | 5 | When only the condition expression is defined in a `for` loop, and the initialization and increment expressions are missing, a `while` loop should be used instead to increase readability. 6 | 7 | ## Noncompliant Code Example 8 | 9 | ```javascript 10 | for (;condition;) { /*...*/ } 11 | ``` 12 | 13 | ## Compliant Solution 14 | 15 | ```javascript 16 | while (condition) { /*...*/ } 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/description/sort-destructure-keys_sort-destructure-keys.md: -------------------------------------------------------------------------------- 1 | # require object destructure keys to be sorted (sort-destructure-keys) 2 | 3 | Keys in an object pattern should be sorted in alphabetical order. The exception 4 | being when any of those keys have a default value equal to previously 5 | destructured key. 6 | 7 | ## Rule Details 8 | 9 | Examples of **incorrect** code for this rule: 10 | 11 | ```js 12 | const {b, a} = someObj; 13 | ``` 14 | 15 | Examples of **correct** code for this rule: 16 | 17 | ```js 18 | const {a, b} = someObj; 19 | 20 | const {b, a = b} = someObj; 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/description/test-selectors_anchor.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```html 8 | Download 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```html 14 | Download 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_button.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```html 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_input.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```html 8 | 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```html 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_onChange.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements with the `onChange` attribute. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```js 8 | 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```js 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_onClick.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements with the `onClick` attribute. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```js 8 | 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```js 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_onKeyDown.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements with the `onKeyDown` attribute. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```js 8 | 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```js 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_onKeyUp.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements with the `onKeyUp` attribute. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```js 8 | 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```js 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/test-selectors_onSubmit.md: -------------------------------------------------------------------------------- 1 | # Requires the `data-test-id` attribute on elements with the `onSubmit` attribute. 2 | 3 | ## Rule Details 4 | 5 | Examples of **incorrect** code for this rule: 6 | 7 | ```js 8 | 9 | ``` 10 | 11 | Examples of **correct** code for this rule: 12 | 13 | ```js 14 | 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /docs/description/unicorn_empty-brace-spaces.md: -------------------------------------------------------------------------------- 1 | # Enforce no spaces between braces 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/sindresorhus/eslint-plugin-unicorn#preset-configs-eslintconfigjs). 4 | 5 | 🔧 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix). 6 | 7 | 8 | 9 | 10 | ## Fail 11 | 12 | ```js 13 | class Unicorn { 14 | } 15 | ``` 16 | 17 | ```js 18 | try { 19 | foo(); 20 | } catch { } 21 | ``` 22 | 23 | ## Pass 24 | 25 | ```js 26 | class Unicorn {} 27 | ``` 28 | 29 | ```js 30 | try { 31 | foo(); 32 | } catch {} 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/description/unicorn_no-instanceof-array.md: -------------------------------------------------------------------------------- 1 | # Require `Array.isArray()` instead of `instanceof Array` 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/sindresorhus/eslint-plugin-unicorn#preset-configs-eslintconfigjs). 4 | 5 | 🔧 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix). 6 | 7 | 8 | 9 | 10 | The `instanceof Array` check doesn't work across realms/contexts, for example, frames/windows in browsers or the `vm` module in Node.js. 11 | 12 | ## Fail 13 | 14 | ```js 15 | array instanceof Array; 16 | [1,2,3] instanceof Array; 17 | ``` 18 | 19 | ## Pass 20 | 21 | ```js 22 | Array.isArray(array); 23 | Array.isArray([1,2,3]); 24 | ``` 25 | -------------------------------------------------------------------------------- /docs/description/unicorn_no-negation-in-equality-check.md: -------------------------------------------------------------------------------- 1 | # Disallow negated expression in equality check 2 | 3 | 💼 This rule is enabled in the ✅ `recommended` [config](https://github.com/sindresorhus/eslint-plugin-unicorn#preset-configs-eslintconfigjs). 4 | 5 | 💡 This rule is manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). 6 | 7 | 8 | 9 | 10 | Using a negated expression in equality check is most likely a mistake. 11 | 12 | ## Fail 13 | 14 | ```js 15 | if (!foo === bar) {} 16 | ``` 17 | 18 | ```js 19 | if (!foo !== bar) {} 20 | ``` 21 | 22 | ## Pass 23 | 24 | ```js 25 | if (foo !== bar) {} 26 | ``` 27 | 28 | ```js 29 | if (!(foo === bar)) {} 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/description/unused-imports_no-unused-imports.md: -------------------------------------------------------------------------------- 1 | # Do not allow unused imports (no-unused-imports) 2 | 3 | A rule to find unused-imports only, as well as an autofixer. 4 | -------------------------------------------------------------------------------- /docs/description/unused-imports_no-unused-vars.md: -------------------------------------------------------------------------------- 1 | # Do not allow unused vars (no-unused-vars) 2 | 3 | This is just a helper rule to filter out the things caught by 4 | the `no-unused-imports` rule without double warnings. As 5 | well as being able to set them at different warning levels. 6 | -------------------------------------------------------------------------------- /docs/description/vuejs-accessibility_aria-props.md: -------------------------------------------------------------------------------- 1 | # aria-props 2 | 3 | Elements cannot use an invalid ARIA attribute. This will fail if it finds an `aria-*` property that is not listed in [WAI-ARIA States and Properties spec](https://www.w3.org/TR/wai-aria/#state_prop_def). 4 | 5 | ## 🔧 Options 6 | 7 | This rule takes no arguments. 8 | 9 | ### ✔ Succeed 10 | 11 | ```vue 12 | 15 | ``` 16 | 17 | ### ❌ Fail 18 | 19 | ```vue 20 | 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/description/vuejs-accessibility_aria-unsupported-elements.md: -------------------------------------------------------------------------------- 1 | # aria-unsupported-elements 2 | 3 | Certain reserved DOM elements do not support ARIA roles, states, and properties. This is often because they are not visible, for example `meta`, `html`, `script`, `style`. This rule enforces that these DOM elements do not contain the `role` and/or `aria-*` props. 4 | 5 | ## 🔧 Options 6 | 7 | This rule takes no arguments. 8 | 9 | ### ✔ Succeed 10 | 11 | ```html 12 | 13 | ``` 14 | 15 | ### ❌ Fail 16 | 17 | ```html 18 | 19 | ``` 20 | 21 | ## 📚 Resources 22 | 23 | - [AX_ARIA_12](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_12) 24 | -------------------------------------------------------------------------------- /docs/description/vuejs-accessibility_click-events-have-key-events.md: -------------------------------------------------------------------------------- 1 | # click-events-have-key-events 2 | 3 | Enforce `@click` is accompanied by at least one of the following: `@keyup`, `@keydown`, `@keypress`. Coding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users. 4 | 5 | ## 🔧 Options 6 | 7 | This rule takes no arguments. 8 | 9 | ### ✔ Succeed 10 | 11 | ```vue 12 | 17 | ``` 18 | 19 | ### ❌ Fail 20 | 21 | ```vue 22 | 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/description/vuejs-accessibility_iframe-has-title.md: -------------------------------------------------------------------------------- 1 | # iframe-has-title 2 | 3 | `