@critiq/rules 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +468 -0
- package/README.md +13 -233
- package/catalog-metadata.json +47 -0
- package/catalog.yaml +2962 -309
- package/package.json +1 -1
- package/rules/go/go.bug-risk.compound-assignment-misuse.rule.yaml +53 -0
- package/rules/go/go.bug-risk.deprecated-redis-methods.rule.yaml +57 -0
- package/rules/go/go.bug-risk.etcd-getlogger-misuse.rule.yaml +59 -0
- package/rules/go/go.bug-risk.etcd-invalid-compare-operator.rule.yaml +53 -0
- package/rules/go/go.bug-risk.gin-loadhtmlglob-ill-formed.rule.yaml +53 -0
- package/rules/go/go.bug-risk.gorm-dry-run-enabled.rule.yaml +58 -0
- package/rules/go/go.bug-risk.gorm-skip-default-transaction.rule.yaml +57 -0
- package/rules/go/go.bug-risk.gorm-updates-zero-values.rule.yaml +55 -0
- package/rules/go/go.bug-risk.gorm-where-zero-values.rule.yaml +53 -0
- package/rules/go/go.bug-risk.poorly-formed-nilness-guards.rule.yaml +57 -0
- package/rules/go/go.bug-risk.redis-incorrect-arg-count.rule.yaml +54 -0
- package/rules/go/go.bug-risk.redis-unimplemented-method.rule.yaml +53 -0
- package/rules/go/go.bug-risk.reflect-makefunc-usage.rule.yaml +55 -0
- package/rules/go/go.correctness.bare-return.rule.yaml +52 -0
- package/rules/go/go.correctness.boolean-literal-in-expression.rule.yaml +52 -0
- package/rules/go/go.correctness.boolean-simplification.rule.yaml +49 -0
- package/rules/go/go.correctness.deferred-func-literal.rule.yaml +52 -0
- package/rules/go/go.correctness.duplicate-branch-body.rule.yaml +49 -0
- package/rules/go/go.correctness.duplicate-function-arguments.rule.yaml +49 -0
- package/rules/go/go.correctness.duplicate-if-else-condition.rule.yaml +54 -0
- package/rules/go/go.correctness.duplicate-switch-cases.rule.yaml +48 -0
- package/rules/go/go.correctness.flag-pointer-immediate-deref.rule.yaml +49 -0
- package/rules/go/go.correctness.hidden-goroutine.rule.yaml +55 -0
- package/rules/go/go.correctness.http-nobody-nil.rule.yaml +52 -0
- package/rules/go/go.correctness.identical-binary-operands.rule.yaml +48 -0
- package/rules/go/go.correctness.impossible-interface-nil-check.rule.yaml +56 -0
- package/rules/go/go.correctness.incomplete-nil-check.rule.yaml +49 -0
- package/rules/go/go.correctness.integer-truncation.rule.yaml +51 -0
- package/rules/go/go.correctness.interface-any-preferred.rule.yaml +50 -0
- package/rules/go/go.correctness.nil-error-returned.rule.yaml +49 -0
- package/rules/go/go.correctness.off-by-one-index.rule.yaml +48 -0
- package/rules/go/go.correctness.redundant-type-declaration.rule.yaml +51 -0
- package/rules/go/go.correctness.signedness-casting.rule.yaml +56 -0
- package/rules/go/go.correctness.string-concat-simplify.rule.yaml +52 -0
- package/rules/go/go.correctness.suspicious-regex-pattern.rule.yaml +49 -0
- package/rules/go/go.correctness.terminal-call-with-defer.rule.yaml +50 -0
- package/rules/go/go.correctness.unexported-capital-name.rule.yaml +52 -0
- package/rules/go/go.correctness.unnecessary-dereference.rule.yaml +53 -0
- package/rules/go/go.correctness.unnecessary-else-return.rule.yaml +52 -0
- package/rules/go/go.correctness.unreachable-switch-case.rule.yaml +50 -0
- package/rules/go/go.doc.malformed-deprecated-comment.rule.yaml +59 -0
- package/rules/go/go.performance.avoid-large-loop-copy.rule.yaml +38 -0
- package/rules/go/go.performance.avoid-large-param-copy.rule.yaml +38 -0
- package/rules/go/go.performance.avoid-large-range-copy.rule.yaml +37 -0
- package/rules/go/go.performance.avoid-string-index-alloc.rule.yaml +38 -0
- package/rules/go/go.performance.combine-append-calls.rule.yaml +38 -0
- package/rules/go/go.performance.fmt-fprint.rule.yaml +44 -0
- package/rules/go/go.performance.iowriter-write-string.rule.yaml +45 -0
- package/rules/go/go.performance.non-idiomatic-slice-zeroing.rule.yaml +44 -0
- package/rules/go/go.performance.reorder-operands.rule.yaml +44 -0
- package/rules/go/go.performance.utf8-decode-rune.rule.yaml +44 -0
- package/rules/go/go.security.decompression-bomb.rule.yaml +55 -0
- package/rules/go/go.security.http-dir-path-traversal.rule.yaml +55 -0
- package/rules/go/go.security.incomplete-hostname-regex.rule.yaml +64 -0
- package/rules/go/go.security.insecure-ssl-protocol.rule.yaml +2 -0
- package/rules/go/go.security.jwt-without-verification.rule.yaml +2 -0
- package/rules/go/go.security.net-http-missing-timeouts.rule.yaml +3 -0
- package/rules/go/go.security.pprof-exposed.rule.yaml +2 -0
- package/rules/go/go.security.squirrel-unsafe-quoting.rule.yaml +64 -0
- package/rules/go/go.security.tainted-value-sink.rule.yaml +59 -0
- package/rules/go/go.security.tls-missing-min-version.rule.yaml +2 -0
- package/rules/go/go.security.unsafe-defer-close.rule.yaml +55 -0
- package/rules/go/go.security.weak-crypto-import.rule.yaml +3 -0
- package/rules/go/go.security.weak-file-permission.rule.yaml +56 -0
- package/rules/java/java.correctness.annotation-check-always-false.rule.yaml +42 -0
- package/rules/java/java.correctness.array-compared-to-non-array.rule.yaml +45 -0
- package/rules/java/java.correctness.array-index-bounds.rule.yaml +42 -0
- package/rules/java/java.correctness.assert-self-comparison.rule.yaml +46 -0
- package/rules/java/java.correctness.assertion-in-production.rule.yaml +49 -0
- package/rules/java/java.correctness.bad-short-circuit-null-check.rule.yaml +45 -0
- package/rules/java/java.correctness.bitwise-or-never-equal.rule.yaml +42 -0
- package/rules/java/java.correctness.boxed-boolean-conditional.rule.yaml +42 -0
- package/rules/java/java.correctness.cacheloader-null-return.rule.yaml +42 -0
- package/rules/java/java.correctness.case-insensitive-regex-lacks-unicode.rule.yaml +46 -0
- package/rules/java/java.correctness.catch-null-pointer.rule.yaml +5 -1
- package/rules/java/java.correctness.class-isinstance-on-class.rule.yaml +42 -0
- package/rules/java/java.correctness.class-name-collision.rule.yaml +45 -0
- package/rules/java/java.correctness.clone-without-super.rule.yaml +45 -0
- package/rules/java/java.correctness.closeable-provides-injection.rule.yaml +43 -0
- package/rules/java/java.correctness.collection-adds-self.rule.yaml +42 -0
- package/rules/java/java.correctness.collection-contains-self.rule.yaml +42 -0
- package/rules/java/java.correctness.collection-remove-type-mismatch.rule.yaml +42 -0
- package/rules/java/java.correctness.comparator-downcast-sign-flip.rule.yaml +42 -0
- package/rules/java/java.correctness.compareto-min-value.rule.yaml +44 -0
- package/rules/java/java.correctness.constructor-starts-thread.rule.yaml +45 -0
- package/rules/java/java.correctness.default-package-spring-scan.rule.yaml +46 -0
- package/rules/java/java.correctness.deprecated-thread-methods.rule.yaml +42 -0
- package/rules/java/java.correctness.double-assignment.rule.yaml +42 -0
- package/rules/java/java.correctness.double-checked-locking.rule.yaml +42 -0
- package/rules/java/java.correctness.duplicate-binary-argument.rule.yaml +45 -0
- package/rules/java/java.correctness.duration-with-nanos-misuse.rule.yaml +42 -0
- package/rules/java/java.correctness.enum-equals-method.rule.yaml +45 -0
- package/rules/java/java.correctness.enum-get-class.rule.yaml +42 -0
- package/rules/java/java.correctness.equals-inherits-parent.rule.yaml +45 -0
- package/rules/java/java.correctness.equals-null-check.rule.yaml +45 -0
- package/rules/java/java.correctness.equals-null.rule.yaml +45 -0
- package/rules/java/java.correctness.equals-on-array.rule.yaml +4 -0
- package/rules/java/java.correctness.explicit-finalizer-invocation.rule.yaml +45 -0
- package/rules/java/java.correctness.for-loop-mismatched-increment.rule.yaml +45 -0
- package/rules/java/java.correctness.getter-setter-sync-mismatch.rule.yaml +42 -0
- package/rules/java/java.correctness.hashcode-on-array.rule.yaml +42 -0
- package/rules/java/java.correctness.hashtable-contains-value.rule.yaml +42 -0
- package/rules/java/java.correctness.hasnext-invokes-next.rule.yaml +45 -0
- package/rules/java/java.correctness.ignored-inputstream-read.rule.yaml +45 -0
- package/rules/java/java.correctness.ignored-inputstream-skip.rule.yaml +45 -0
- package/rules/java/java.correctness.illegal-monitor-state-caught.rule.yaml +45 -0
- package/rules/java/java.correctness.impossible-toarray-downcast.rule.yaml +45 -0
- package/rules/java/java.correctness.incorrect-main-signature.rule.yaml +42 -0
- package/rules/java/java.correctness.indexof-reversed-arguments.rule.yaml +42 -0
- package/rules/java/java.correctness.instant-unsupported-temporal-unit.rule.yaml +42 -0
- package/rules/java/java.correctness.invalid-regex-literal.rule.yaml +45 -0
- package/rules/java/java.correctness.invalid-serial-version-uid.rule.yaml +42 -0
- package/rules/java/java.correctness.invalid-time-constants.rule.yaml +42 -0
- package/rules/java/java.correctness.invalidated-iterator.rule.yaml +42 -0
- package/rules/java/java.correctness.iterable-iterator-returns-this.rule.yaml +44 -0
- package/rules/java/java.correctness.iterable-path-type.rule.yaml +42 -0
- package/rules/java/java.correctness.jump-in-finally.rule.yaml +44 -0
- package/rules/java/java.correctness.loop-condition-never-true.rule.yaml +42 -0
- package/rules/java/java.correctness.lost-increment-in-assignment.rule.yaml +45 -0
- package/rules/java/java.correctness.math-max-min-swapped.rule.yaml +45 -0
- package/rules/java/java.correctness.missing-enum-switch-elements.rule.yaml +43 -0
- package/rules/java/java.correctness.modulus-multiplication-precedence.rule.yaml +42 -0
- package/rules/java/java.correctness.mutable-data-exposed.rule.yaml +42 -0
- package/rules/java/java.correctness.mutable-enum-fields.rule.yaml +44 -0
- package/rules/java/java.correctness.nan-comparison.rule.yaml +42 -0
- package/rules/java/java.correctness.ncopies-argument-order.rule.yaml +42 -0
- package/rules/java/java.correctness.noallocation-method-creates-object.rule.yaml +45 -0
- package/rules/java/java.correctness.non-final-immutable-fields.rule.yaml +45 -0
- package/rules/java/java.correctness.non-null-method-returns-null.rule.yaml +43 -0
- package/rules/java/java.correctness.non-terminating-loop.rule.yaml +42 -0
- package/rules/java/java.correctness.oddness-check-fails-negative.rule.yaml +45 -0
- package/rules/java/java.correctness.optional-get-without-present-check.rule.yaml +44 -0
- package/rules/java/java.correctness.optional-null.rule.yaml +42 -0
- package/rules/java/java.correctness.overloaded-equals.rule.yaml +45 -0
- package/rules/java/java.correctness.parameter-reassignment.rule.yaml +46 -0
- package/rules/java/java.correctness.possible-null-access-exception.rule.yaml +42 -0
- package/rules/java/java.correctness.possible-null-access.rule.yaml +42 -0
- package/rules/java/java.correctness.prepared-statement-in-loop.rule.yaml +52 -0
- package/rules/java/java.correctness.prepared-statement-index-zero.rule.yaml +44 -0
- package/rules/java/java.correctness.random-coerced-to-zero.rule.yaml +44 -0
- package/rules/java/java.correctness.read-resolve-return-type.rule.yaml +42 -0
- package/rules/java/java.correctness.readline-without-null-check.rule.yaml +45 -0
- package/rules/java/java.correctness.result-set-index-zero.rule.yaml +44 -0
- package/rules/java/java.correctness.runfinalizers-on-exit.rule.yaml +45 -0
- package/rules/java/java.correctness.runnable-run-direct.rule.yaml +45 -0
- package/rules/java/java.correctness.self-assignment.rule.yaml +45 -0
- package/rules/java/java.correctness.serializable-superclass.rule.yaml +42 -0
- package/rules/java/java.correctness.serialization-method-signature.rule.yaml +42 -0
- package/rules/java/java.correctness.servlet-mutable-fields.rule.yaml +45 -0
- package/rules/java/java.correctness.shift-out-of-range.rule.yaml +44 -0
- package/rules/java/java.correctness.static-date-field.rule.yaml +42 -0
- package/rules/java/java.correctness.stream-reuse.rule.yaml +42 -0
- package/rules/java/java.correctness.string-format-arg-mismatch.rule.yaml +45 -0
- package/rules/java/java.correctness.stringbuilder-char-ctor.rule.yaml +42 -0
- package/rules/java/java.correctness.switch-statement-labels.rule.yaml +44 -0
- package/rules/java/java.correctness.sync-boxed-primitive.rule.yaml +45 -0
- package/rules/java/java.correctness.sync-on-get-class.rule.yaml +42 -0
- package/rules/java/java.correctness.sync-on-lock-primitive.rule.yaml +45 -0
- package/rules/java/java.correctness.sync-on-mutable-ref.rule.yaml +42 -0
- package/rules/java/java.correctness.sync-on-nullable-field.rule.yaml +42 -0
- package/rules/java/java.correctness.sync-on-public-field.rule.yaml +42 -0
- package/rules/java/java.correctness.sync-on-string-literal.rule.yaml +2 -0
- package/rules/java/java.correctness.system-exit.rule.yaml +43 -0
- package/rules/java/java.correctness.thread-sleep-with-lock.rule.yaml +45 -0
- package/rules/java/java.correctness.thread-static-misuse.rule.yaml +42 -0
- package/rules/java/java.correctness.threadgroup-deprecated-methods.rule.yaml +43 -0
- package/rules/java/java.correctness.throw-null.rule.yaml +42 -0
- package/rules/java/java.correctness.timezone-invalid-id.rule.yaml +42 -0
- package/rules/java/java.correctness.two-lock-wait.rule.yaml +45 -0
- package/rules/java/java.correctness.unconditional-recursion.rule.yaml +42 -0
- package/rules/java/java.correctness.unescaped-whitespace.rule.yaml +42 -0
- package/rules/java/java.correctness.unimplementable-interface.rule.yaml +42 -0
- package/rules/java/java.correctness.unsafe-collection-downcast.rule.yaml +42 -0
- package/rules/java/java.correctness.unsafe-getresource.rule.yaml +45 -0
- package/rules/java/java.correctness.unsupported-jdk-api.rule.yaml +46 -0
- package/rules/java/java.correctness.unsupported-method-call.rule.yaml +42 -0
- package/rules/java/java.correctness.unsync-static-lazy-init.rule.yaml +42 -0
- package/rules/java/java.correctness.unsynchronized-wait-notify.rule.yaml +45 -0
- package/rules/java/java.correctness.unterminated-assertion-chain.rule.yaml +39 -0
- package/rules/java/java.correctness.volatile-array-elements.rule.yaml +45 -0
- package/rules/java/java.correctness.volatile-increment-non-atomic.rule.yaml +45 -0
- package/rules/java/java.correctness.wait-notify-on-thread.rule.yaml +45 -0
- package/rules/java/java.correctness.wait-on-condition.rule.yaml +45 -0
- package/rules/java/java.correctness.week-year-in-date-pattern.rule.yaml +44 -0
- package/rules/java/java.correctness.zoneid-invalid-timezone.rule.yaml +42 -0
- package/rules/java/java.doc.empty-javadoc-tag.rule.yaml +41 -0
- package/rules/java/java.doc.malformed-javadoc-comment.rule.yaml +41 -0
- package/rules/java/java.doc.parameter-tag-no-description.rule.yaml +41 -0
- package/rules/java/java.doc.unmatched-parameter-tag.rule.yaml +41 -0
- package/rules/java/java.performance.boxed-boolean-constructor.rule.yaml +43 -0
- package/rules/java/java.performance.boxed-double-constructor.rule.yaml +43 -0
- package/rules/java/java.performance.boxed-integer-constructor.rule.yaml +43 -0
- package/rules/java/java.performance.empty-string-constructor.rule.yaml +44 -0
- package/rules/java/java.performance.expensive-method-on-ui-thread.rule.yaml +50 -0
- package/rules/java/java.performance.explicit-gc.rule.yaml +43 -0
- package/rules/java/java.performance.inefficient-string-constructor.rule.yaml +44 -0
- package/rules/java/java.performance.keyset-instead-of-entryset.rule.yaml +49 -0
- package/rules/java/java.performance.non-zero-to-array.rule.yaml +49 -0
- package/rules/java/java.performance.pattern-compile-in-loop.rule.yaml +49 -0
- package/rules/java/java.performance.removeall-to-clear.rule.yaml +49 -0
- package/rules/java/java.performance.replaceall-instead-of-replace.rule.yaml +49 -0
- package/rules/java/java.performance.single-char-string-indexof.rule.yaml +49 -0
- package/rules/java/java.performance.string-concat-in-loop.rule.yaml +49 -0
- package/rules/java/java.performance.string-to-string.rule.yaml +43 -0
- package/rules/java/java.performance.thread-as-runnable.rule.yaml +44 -0
- package/rules/java/java.performance.url-in-collection.rule.yaml +44 -0
- package/rules/java/java.quality.c-style-array-declaration.rule.yaml +41 -0
- package/rules/java/java.quality.multiple-variables-same-line.rule.yaml +41 -0
- package/rules/java/java.quality.type-name-uppercase.rule.yaml +41 -0
- package/rules/java/java.testing.setup-teardown-annotation.rule.yaml +36 -0
- package/rules/java/java.testing.setup-without-super.rule.yaml +43 -0
- package/rules/java/java.testing.teardown-without-super.rule.yaml +43 -0
- package/rules/java/java.testing.wrong-assertion-argument-order.rule.yaml +43 -0
- package/rules/php/php.correctness.abstract-method-outside-abstract-class.rule.yaml +3 -0
- package/rules/php/php.correctness.abstract-method-with-body.rule.yaml +38 -0
- package/rules/php/php.correctness.assign-to-non-lvalue.rule.yaml +38 -0
- package/rules/php/php.correctness.attribute-on-class-constant.rule.yaml +38 -0
- package/rules/php/php.correctness.attribute-on-closure.rule.yaml +38 -0
- package/rules/php/php.correctness.attribute-on-function.rule.yaml +38 -0
- package/rules/php/php.correctness.attribute-on-property.rule.yaml +40 -0
- package/rules/php/php.correctness.break-continue-outside-loop.rule.yaml +2 -0
- package/rules/php/php.correctness.case-insensitive-define.rule.yaml +2 -0
- package/rules/php/php.correctness.class-implements-non-interface.rule.yaml +38 -0
- package/rules/php/php.correctness.default-parameter-not-last.rule.yaml +2 -0
- package/rules/php/php.correctness.deprecated-filter-constant.rule.yaml +2 -0
- package/rules/php/php.correctness.deprecated-libxml-entity-loader.rule.yaml +2 -0
- package/rules/php/php.correctness.deprecated-unset-cast.rule.yaml +2 -0
- package/rules/php/php.correctness.duplicate-array-key.rule.yaml +2 -0
- package/rules/php/php.correctness.duplicate-declaration.rule.yaml +2 -0
- package/rules/php/php.correctness.duplicate-union-type.rule.yaml +38 -0
- package/rules/php/php.correctness.echo-invalid-value.rule.yaml +38 -0
- package/rules/php/php.correctness.empty-array-literal-slot.rule.yaml +2 -0
- package/rules/php/php.correctness.empty-bracket-array-access.rule.yaml +2 -0
- package/rules/php/php.correctness.empty-code-block.rule.yaml +2 -0
- package/rules/php/php.correctness.empty-function-body.rule.yaml +2 -0
- package/rules/php/php.correctness.error-suppression-operator.rule.yaml +2 -0
- package/rules/php/php.correctness.function-comparison.rule.yaml +2 -0
- package/rules/php/php.correctness.inaccessible-property.rule.yaml +49 -0
- package/rules/php/php.correctness.incomplete-arrow-function.rule.yaml +38 -0
- package/rules/php/php.correctness.inconsistent-printf-params.rule.yaml +50 -0
- package/rules/php/php.correctness.instanceof-invalid-type.rule.yaml +40 -0
- package/rules/php/php.correctness.instantiate-abstract-class.rule.yaml +38 -0
- package/rules/php/php.correctness.interface-extends-non-interface.rule.yaml +38 -0
- package/rules/php/php.correctness.interface-implements-keyword.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-arrow-function-typehint.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-attribute-class.rule.yaml +49 -0
- package/rules/php/php.correctness.invalid-closure-return-typehint.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-constructor-promotion.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-cookie-options.rule.yaml +2 -0
- package/rules/php/php.correctness.invalid-dynamic-constant-fetch.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-extends-target.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-increment-operand.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-isset-argument.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-return-typehint.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-static-method.rule.yaml +40 -0
- package/rules/php/php.correctness.invalid-string-interpolation-type.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-type-cast.rule.yaml +38 -0
- package/rules/php/php.correctness.invalid-use-keyword.rule.yaml +48 -0
- package/rules/php/php.correctness.missing-member-visibility.rule.yaml +2 -0
- package/rules/php/php.correctness.missing-return-statement.rule.yaml +38 -0
- package/rules/php/php.correctness.named-arg-before-positional.rule.yaml +38 -0
- package/rules/php/php.correctness.nested-function-declaration.rule.yaml +2 -0
- package/rules/php/php.correctness.nested-switch.rule.yaml +2 -0
- package/rules/php/php.correctness.nullable-mixed-type.rule.yaml +38 -0
- package/rules/php/php.correctness.nullsafe-returned-by-reference.rule.yaml +3 -0
- package/rules/php/php.correctness.print-invalid-value.rule.yaml +38 -0
- package/rules/php/php.correctness.psr-class-constant-naming.rule.yaml +38 -0
- package/rules/php/php.correctness.psr-method-camel-case.rule.yaml +38 -0
- package/rules/php/php.correctness.redundant-final-method.rule.yaml +38 -0
- package/rules/php/php.correctness.redundant-string-cast-concat.rule.yaml +2 -0
- package/rules/php/php.correctness.self-assignment.rule.yaml +2 -0
- package/rules/php/php.correctness.switch-multiple-default.rule.yaml +2 -0
- package/rules/php/php.correctness.throw-as-expression.rule.yaml +38 -0
- package/rules/php/php.correctness.throw-non-exception.rule.yaml +38 -0
- package/rules/php/php.correctness.trait-as-attribute.rule.yaml +38 -0
- package/rules/php/php.correctness.trait-class-constant.rule.yaml +38 -0
- package/rules/php/php.correctness.undefined-constant-reference.rule.yaml +38 -0
- package/rules/php/php.correctness.undefined-function.rule.yaml +40 -0
- package/rules/php/php.correctness.undefined-method.rule.yaml +40 -0
- package/rules/php/php.correctness.undefined-property.rule.yaml +51 -0
- package/rules/php/php.correctness.undefined-static-property.rule.yaml +41 -0
- package/rules/php/php.correctness.undefined-variable.rule.yaml +48 -0
- package/rules/php/php.correctness.uninitialized-typed-property.rule.yaml +38 -0
- package/rules/php/php.correctness.unknown-magic-method.rule.yaml +2 -0
- package/rules/php/php.correctness.unreachable-after-return.rule.yaml +2 -0
- package/rules/php/php.correctness.unused-closure-use-variable.rule.yaml +38 -0
- package/rules/php/php.correctness.unused-constructor-parameter.rule.yaml +38 -0
- package/rules/php/php.correctness.unused-import.rule.yaml +38 -0
- package/rules/php/php.correctness.useless-post-increment.rule.yaml +2 -0
- package/rules/php/php.correctness.useless-unset.rule.yaml +2 -0
- package/rules/php/php.correctness.void-match-arm.rule.yaml +38 -0
- package/rules/php/php.performance.expensive-loop-condition.rule.yaml +2 -0
- package/rules/php/php.security.debug-function-exposure.rule.yaml +2 -0
- package/rules/php/php.security.insecure-session-id-generation.rule.yaml +2 -0
- package/rules/php/php.security.insecure-session-or-cookie-config.rule.yaml +3 -0
- package/rules/php/php.security.no-dynamic-eval.rule.yaml +2 -0
- package/rules/php/php.security.unsafe-include-with-user-input.rule.yaml +2 -0
- package/rules/php/php.security.unsafe-new-static.rule.yaml +2 -0
- package/rules/php/php.security.weak-cipher.rule.yaml +2 -0
- package/rules/php/php.security.xml-external-entity.rule.yaml +2 -0
- package/rules/python/py.correctness.assert-outside-test.rule.yaml +49 -0
- package/rules/python/py.correctness.global-statement.rule.yaml +51 -0
- package/rules/python/py.correctness.redefined-builtin.rule.yaml +51 -0
- package/rules/python/py.correctness.super-with-arguments.rule.yaml +51 -0
- package/rules/python/py.correctness.unnecessary-comprehension.rule.yaml +51 -0
- package/rules/python/py.correctness.useless-return.rule.yaml +51 -0
- package/rules/python/py.security.command-execution-with-request-input.rule.yaml +56 -0
- package/rules/python/py.security.ftp-usage.rule.yaml +51 -0
- package/rules/python/py.security.hardcoded-credentials.rule.yaml +51 -0
- package/rules/python/py.security.hardcoded-temp-directory.rule.yaml +51 -0
- package/rules/python/py.security.insecure-cipher-mode.rule.yaml +51 -0
- package/rules/python/py.security.insecure-cipher.rule.yaml +51 -0
- package/rules/python/py.security.insecure-crypto-import.rule.yaml +51 -0
- package/rules/python/py.security.insecure-http-transport.rule.yaml +56 -0
- package/rules/python/py.security.insecure-ssl-version.rule.yaml +53 -0
- package/rules/python/py.security.insecure-urllib-method.rule.yaml +51 -0
- package/rules/python/py.security.insecure-xml-parser.rule.yaml +53 -0
- package/rules/python/py.security.mako-insecure-templates.rule.yaml +53 -0
- package/rules/python/py.security.path-traversal-user-input.rule.yaml +51 -0
- package/rules/python/py.security.request-path-file-read.rule.yaml +56 -0
- package/rules/python/py.security.sensitive-logging.rule.yaml +51 -0
- package/rules/python/py.security.sql-interpolation.rule.yaml +56 -0
- package/rules/python/py.security.ssh-host-key-validation.rule.yaml +53 -0
- package/rules/python/py.security.telnet-usage.rule.yaml +51 -0
- package/rules/python/py.security.tls-verification-disabled.rule.yaml +56 -0
- package/rules/python/py.security.unsafe-deserialization.rule.yaml +56 -0
- package/rules/python/py.security.weak-crypto-key.rule.yaml +51 -0
- package/rules/python/py.security.weak-hash-algorithm.rule.yaml +57 -0
- package/rules/python/py.security.wildcard-subprocess-injection.rule.yaml +53 -0
- package/rules/python/py.security.xmlrpc-import.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.action-mailer-base-subclass.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.active-job-base-subclass.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.active-record-alias.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.active-record-base-subclass.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.active-record-method-override.rule.yaml +55 -0
- package/rules/ruby/ruby.bug-risk.active-support-alias.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.all-each-to-find-each.rule.yaml +55 -0
- package/rules/ruby/ruby.bug-risk.allow-blank-with-delegate.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.alter-queries-combine.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.ambiguous-block-association.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.ambiguous-operator-argument.rule.yaml +48 -0
- package/rules/ruby/ruby.bug-risk.ambiguous-regexp-literal.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.argument-overwritten-before-use.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.assert-not-usage.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.bad-date-usage.rule.yaml +55 -0
- package/rules/ruby/ruby.bug-risk.bad-magic-comment-order.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.bad-operand-order.rule.yaml +46 -0
- package/rules/ruby/ruby.bug-risk.bad-rescue-ordering.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.branches-without-body.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.callback-order.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.callback-override.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.circular-argument-reference.rule.yaml +44 -0
- package/rules/ruby/ruby.bug-risk.class-name-should-be-string.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.console-output-instead-of-logger.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.constant-in-block.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.controller-base-subclass.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.dependent-option-cascade.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.deprecated-belongs-to-required.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.deprecated-big-decimal-new.rule.yaml +44 -0
- package/rules/ruby/ruby.bug-risk.deprecated-class-methods.rule.yaml +45 -0
- package/rules/ruby/ruby.bug-risk.deprecated-filter-methods.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.deprecated-find-by-dynamic.rule.yaml +55 -0
- package/rules/ruby/ruby.bug-risk.deprecated-http-status-symbols.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.deprecated-openssl-api.rule.yaml +42 -0
- package/rules/ruby/ruby.bug-risk.deprecated-uri-regexp.rule.yaml +42 -0
- package/rules/ruby/ruby.bug-risk.disjunctive-assignment-in-constructor.rule.yaml +46 -0
- package/rules/ruby/ruby.bug-risk.duplicate-case-conditions.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.duplicate-constant-assignment.rule.yaml +47 -0
- package/rules/ruby/ruby.bug-risk.duplicate-elsif-block.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.duplicate-method-definitions.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.each-with-object-immutable-arg.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.else-followed-by-expression.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.else-without-rescue.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.empty-ensure-block.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.empty-expression.rule.yaml +48 -0
- package/rules/ruby/ruby.bug-risk.empty-interpolation.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.end-in-method.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.enum-array-syntax.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.enum-duplicate-values.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.equal-instead-of-equal.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.error-inherits-exception.rule.yaml +42 -0
- package/rules/ruby/ruby.bug-risk.exit-in-app-code.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.flip-flop-operator.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.git-in-gemspec.rule.yaml +48 -0
- package/rules/ruby/ruby.bug-risk.grouped-parentheses-in-call.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.has-and-belongs-to-many.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.helper-instance-variables.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.heredoc-method-order.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.http-methods-without-params.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.identical-binary-operands.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.ignored-column-accessed.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.inconsistent-request-referrer.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.inconsistent-safe-navigation-try.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.inconsistent-safe-navigation.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.incorrect-pluralization.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.ineffective-access-modifier.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.interpolation-in-single-quote.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.invalid-integer-times.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.invalid-percent-string-literal.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.invalid-percent-symbol-array.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.invalid-rails-env-predicate.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.invalid-rescue-type.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.io-select-single-arg.rule.yaml +48 -0
- package/rules/ruby/ruby.bug-risk.irreversible-migration.rule.yaml +57 -0
- package/rules/ruby/ruby.bug-risk.missing-inverse-of.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.mixed-regex-captures.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.multiple-rescues-for-same-exception.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.non-local-exit-from-iterator.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.non-null-column-without-default.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.non-preferred-assert-falseness.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.old-style-validation-macro.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.outer-variable-shadowed.rule.yaml +47 -0
- package/rules/ruby/ruby.bug-risk.plain-method-instead-of-proc.rule.yaml +48 -0
- package/rules/ruby/ruby.bug-risk.predicate-method-without-parentheses.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.rails-env-equality.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.rails-root-join.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.rake-task-missing-environment.rule.yaml +46 -0
- package/rules/ruby/ruby.bug-risk.redundant-allow-nil.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.redundant-foreign-key.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.redundant-with-options-receiver.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.regex-literal-in-condition.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.relative-date-as-constant.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.renamed-column-accessed.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.rescue-exception.rule.yaml +42 -0
- package/rules/ruby/ruby.bug-risk.return-in-ensure.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.routes-match-single-verb.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.safe-navigation-with-blank.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.safe-navigation-with-empty.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.self-assignment.rule.yaml +52 -0
- package/rules/ruby/ruby.bug-risk.skip-filter-conditional.rule.yaml +55 -0
- package/rules/ruby/ruby.bug-risk.suppressed-exceptions.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.symbol-boolean-name.rule.yaml +44 -0
- package/rules/ruby/ruby.bug-risk.table-without-timestamps.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.time-without-zone.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.to-json-without-argument.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.trailing-comma-attribute.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.undefined-action-filter.rule.yaml +53 -0
- package/rules/ruby/ruby.bug-risk.unintended-string-concatenation.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.unnecessary-require.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.unnecessary-splat.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.unqualified-constant.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.unreachable-code.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.unreachable-loop.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.unsafe-number-conversion.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.unsafe-safe-navigation-chain.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.unused-method-arguments.rule.yaml +51 -0
- package/rules/ruby/ruby.bug-risk.use-blank-simplify.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.use-delegate.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.use-presence-over-explicit-check.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.use-present-to-simplify-conditional.rule.yaml +48 -0
- package/rules/ruby/ruby.bug-risk.use-square-brackets-for-attributes.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.useless-access-modifier.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.useless-comparison.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.useless-setter-call.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.when-branch-without-body.rule.yaml +49 -0
- package/rules/ruby/ruby.bug-risk.where-first-over-find-by.rule.yaml +54 -0
- package/rules/ruby/ruby.bug-risk.with-index-value-unused.rule.yaml +50 -0
- package/rules/ruby/ruby.bug-risk.with-object-value-unused.rule.yaml +50 -0
- package/rules/ruby/ruby.performance.efficient-hash-search.rule.yaml +42 -0
- package/rules/ruby/ruby.performance.enumerable-index-by.rule.yaml +51 -0
- package/rules/ruby/ruby.performance.enumerable-index-with.rule.yaml +52 -0
- package/rules/ruby/ruby.performance.merge-single-key.rule.yaml +42 -0
- package/rules/ruby/ruby.performance.no-static-size-computation.rule.yaml +43 -0
- package/rules/ruby/ruby.performance.prefer-delete-prefix.rule.yaml +53 -0
- package/rules/ruby/ruby.performance.prefer-delete-suffix.rule.yaml +53 -0
- package/rules/ruby/ruby.performance.prefer-flat-map.rule.yaml +41 -0
- package/rules/ruby/ruby.performance.prefer-struct-over-openstruct.rule.yaml +42 -0
- package/rules/ruby/ruby.performance.range-cover-over-include.rule.yaml +43 -0
- package/rules/ruby/ruby.performance.regex-match-over-match.rule.yaml +42 -0
- package/rules/ruby/ruby.performance.yield-over-block-call.rule.yaml +41 -0
- package/rules/ruby/ruby.security.io-shell-command.rule.yaml +50 -0
- package/rules/ruby/ruby.security.rails-http-digest-auth.rule.yaml +51 -0
- package/rules/ruby/ruby.security.rails-render-inline.rule.yaml +55 -0
- package/rules/ruby/ruby.security.rails-skip-validation.rule.yaml +51 -0
- package/rules/rust/rust.correctness.empty-range-expression.rule.yaml +49 -0
- package/rules/rust/rust.correctness.erasing-operation.rule.yaml +49 -0
- package/rules/rust/rust.correctness.forget-drop-on-copy-type.rule.yaml +50 -0
- package/rules/rust/rust.correctness.forget-drop-on-non-drop-type.rule.yaml +50 -0
- package/rules/rust/rust.correctness.forget-drop-on-reference.rule.yaml +49 -0
- package/rules/rust/rust.correctness.hash-unit-value.rule.yaml +49 -0
- package/rules/rust/rust.correctness.identical-binary-operands.rule.yaml +49 -0
- package/rules/rust/rust.correctness.ignored-future-value.rule.yaml +53 -0
- package/rules/rust/rust.correctness.invalid-regex-literal.rule.yaml +49 -0
- package/rules/rust/rust.correctness.iter-next-in-for-loop.rule.yaml +49 -0
- package/rules/rust/rust.correctness.mistyped-suffix.rule.yaml +50 -0
- package/rules/rust/rust.correctness.nan-comparison.rule.yaml +49 -0
- package/rules/rust/rust.correctness.non-binding-let-on-lock.rule.yaml +50 -0
- package/rules/rust/rust.correctness.non-octal-permissions.rule.yaml +60 -0
- package/rules/rust/rust.correctness.print-in-display-impl.rule.yaml +48 -0
- package/rules/rust/rust.correctness.self-not-self-type.rule.yaml +49 -0
- package/rules/rust/rust.correctness.step-by-zero.rule.yaml +48 -0
- package/rules/rust/rust.correctness.syntax-error.rule.yaml +49 -0
- package/rules/rust/rust.correctness.transmute-float-char-to-ref-or-ptr.rule.yaml +48 -0
- package/rules/rust/rust.correctness.transmute-int-lit-to-raw-ptr.rule.yaml +48 -0
- package/rules/rust/rust.correctness.transmute-int-to-fn-ptr.rule.yaml +48 -0
- package/rules/rust/rust.correctness.transmute-integer-to-bool.rule.yaml +49 -0
- package/rules/rust/rust.correctness.transmute-integer-to-char.rule.yaml +48 -0
- package/rules/rust/rust.correctness.transmute-integer-to-nonzero.rule.yaml +48 -0
- package/rules/rust/rust.correctness.transmute-number-to-slice-or-array.rule.yaml +48 -0
- package/rules/rust/rust.correctness.transmute-ptr-to-ptr.rule.yaml +49 -0
- package/rules/rust/rust.correctness.transmute-ptr-to-ref.rule.yaml +49 -0
- package/rules/rust/rust.correctness.transmute-ref-to-ptr.rule.yaml +49 -0
- package/rules/rust/rust.correctness.transmute-t-to-ptr-ref.rule.yaml +49 -0
- package/rules/rust/rust.correctness.transmute-tuple-to-slice-or-array.rule.yaml +48 -0
- package/rules/rust/rust.correctness.unhandled-io-result.rule.yaml +49 -0
- package/rules/rust/rust.correctness.unit-argument.rule.yaml +50 -0
- package/rules/rust/rust.correctness.unit-comparison.rule.yaml +49 -0
- package/rules/rust/rust.performance.single-char-string-literal-pattern.rule.yaml +51 -0
- package/rules/rust/rust.quality.approximate-floating-constant.rule.yaml +51 -0
- package/rules/rust/rust.quality.builtin-type-shadow.rule.yaml +49 -0
- package/rules/rust/rust.quality.clone-on-double-reference.rule.yaml +50 -0
- package/rules/rust/rust.quality.crate-in-macro-definition.rule.yaml +50 -0
- package/rules/rust/rust.quality.deprecated-function-use.rule.yaml +52 -0
- package/rules/rust/rust.quality.env-string-literal.rule.yaml +50 -0
- package/rules/rust/rust.quality.explicit-self-assignment.rule.yaml +49 -0
- package/rules/rust/rust.quality.fn-ptr-null-comparison.rule.yaml +49 -0
- package/rules/rust/rust.quality.fn-ptr-to-non-pointer-cast.rule.yaml +50 -0
- package/rules/rust/rust.quality.inaccurate-duration-calculation.rule.yaml +50 -0
- package/rules/rust/rust.quality.isize-usize-overflow.rule.yaml +50 -0
- package/rules/rust/rust.quality.iter-count-instead-of-len.rule.yaml +49 -0
- package/rules/rust/rust.quality.iter-nth-instead-of-get.rule.yaml +50 -0
- package/rules/rust/rust.quality.map-followed-by-count.rule.yaml +50 -0
- package/rules/rust/rust.quality.non-owned-rc-pointer-into-vec.rule.yaml +50 -0
- package/rules/rust/rust.quality.non-utf8-literal-in-from-utf8-unchecked.rule.yaml +54 -0
- package/rules/rust/rust.quality.option-env-unwrap.rule.yaml +50 -0
- package/rules/rust/rust.quality.ordered-iteration-on-unordered.rule.yaml +52 -0
- package/rules/rust/rust.quality.possible-missing-comma-in-array.rule.yaml +49 -0
- package/rules/rust/rust.quality.potentially-incomplete-ascii-range.rule.yaml +49 -0
- package/rules/rust/rust.quality.redundant-mem-replace-with-default.rule.yaml +48 -0
- package/rules/rust/rust.quality.redundant-mem-replace-with-none.rule.yaml +48 -0
- package/rules/rust/rust.quality.redundant-mem-replace-with-zero.rule.yaml +48 -0
- package/rules/rust/rust.quality.replace-same-pattern-and-replacement.rule.yaml +49 -0
- package/rules/rust/rust.quality.size-of-val-on-reference.rule.yaml +49 -0
- package/rules/rust/rust.quality.unused-enumerate-or-zip-items.rule.yaml +50 -0
- package/rules/rust/rust.security.actix-namedfile-path-traversal.rule.yaml +61 -0
- package/rules/rust/rust.security.bind-all-interfaces.rule.yaml +2 -0
- package/rules/rust/rust.security.const-to-mut-ptr.rule.yaml +61 -0
- package/rules/rust/rust.security.differently-sized-slice-conversion.rule.yaml +61 -0
- package/rules/rust/rust.security.global-write-permission.rule.yaml +61 -0
- package/rules/rust/rust.security.insecure-temp-file.rule.yaml +2 -0
- package/rules/rust/rust.security.invisible-unicode.rule.yaml +60 -0
- package/rules/rust/rust.security.manual-error-type-id.rule.yaml +59 -0
- package/rules/rust/rust.security.missing-regex-anchor.rule.yaml +61 -0
- package/rules/rust/rust.security.misused-bitwise-xor.rule.yaml +54 -0
- package/rules/rust/rust.security.open-redirect.rule.yaml +64 -0
- package/rules/rust/rust.security.potentially-vulnerable-regex.rule.yaml +61 -0
- package/rules/rust/rust.security.raw-slice-to-ptr.rule.yaml +60 -0
- package/rules/rust/rust.security.unsafe-remove-dir-all.rule.yaml +62 -0
- package/rules/rust/rust.security.weak-crypto-import.rule.yaml +2 -0
- package/rules/rust/rust.security.weak-rsa-key-size.rule.yaml +2 -0
- package/rules/rust/rust.testing.ignore-without-ticket-reference.rule.yaml +13 -7
- package/rules/rust/rust.testing.thread-sleep-in-unit-test.rule.yaml +6 -6
- package/rules/shared/security.no-command-execution-with-request-input.rule.yaml +3 -0
- package/rules/shared/security.no-sensitive-data-in-logs-and-telemetry.rule.yaml +2 -0
- package/rules/shared/security.no-sql-interpolation.rule.yaml +2 -0
- package/rules/shared/security.permissive-file-permissions.rule.yaml +2 -0
- package/rules/shared/security.weak-hash-algorithm.rule.yaml +2 -0
- package/rules/sql/sql.correctness.undefined-reference.rule.yaml +37 -0
- package/rules/sql/sql.style.ambiguous-distinct.rule.yaml +37 -0
- package/rules/sql/sql.style.column-expression-without-alias.rule.yaml +37 -0
- package/rules/sql/sql.style.distinct-with-parenthesis.rule.yaml +37 -0
- package/rules/sql/sql.style.duplicate-table-aliases.rule.yaml +37 -0
- package/rules/sql/sql.style.implicit-column-alias.rule.yaml +37 -0
- package/rules/sql/sql.style.implicit-table-alias.rule.yaml +37 -0
- package/rules/sql/sql.style.inconsistent-capitalization.rule.yaml +37 -0
- package/rules/sql/sql.style.inconsistent-keyword-case.rule.yaml +37 -0
- package/rules/sql/sql.style.keyword-as-identifier.rule.yaml +37 -0
- package/rules/sql/sql.style.trailing-select-comma.rule.yaml +37 -0
- package/rules/sql/sql.style.unqualified-references.rule.yaml +37 -0
- package/rules/sql/sql.style.unused-table-alias.rule.yaml +37 -0
- package/rules/typescript/ts.angularjs.inject-function-assignments-only.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.no-controller.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.no-deprecated-cookie-store.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.no-deprecated-directive-replace.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.no-deprecated-http-success-error.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.no-jquery-wrapping-angular-element.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.prefer-angular-for-each.rule.yaml +36 -0
- package/rules/typescript/ts.angularjs.prefer-angular-is-string.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.array-callback-missing-return.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.array-sort-without-compare.rule.yaml +5 -3
- package/rules/typescript/ts.correctness.assignment-in-condition.rule.yaml +4 -2
- package/rules/typescript/ts.correctness.assignment-to-exports.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.assignment-to-import-binding.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.async-promise-executor.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.blocking-call-in-async-flow.rule.yaml +14 -3
- package/rules/typescript/ts.correctness.callback-missing-error-handling.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.callback-not-error-first.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.compound-assignment-with-await.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.confusing-multiline-expression.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.constructor-return-value.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.control-flow-in-finally.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.declaration-in-nested-block.rule.yaml +39 -0
- package/rules/typescript/ts.correctness.delete-on-variable.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.deprecated-api-usage.rule.yaml +39 -0
- package/rules/typescript/ts.correctness.duplicate-class-member.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.duplicate-export.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.duplicate-function-parameter.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.duplicate-if-else-condition.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.duplicate-import-source.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.duplicate-object-key.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.duplicate-switch-case.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.empty-block-statement.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.empty-destructuring-pattern.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.extraneous-import.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.flawed-string-comparison.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.global-object-called-as-function.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.identical-comparison-operands.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.implicit-undefined-return.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.infinite-loop.rule.yaml +16 -7
- package/rules/typescript/ts.correctness.invalid-async-await-call.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.invalid-shebang.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.invalid-typeof-comparison.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.invalid-variable-usage.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.missing-async-on-promise-method.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.missing-super-call.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.missing-timeout-on-external-call.rule.yaml +13 -6
- package/rules/typescript/ts.correctness.missing-type-annotation.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.namespace-import-unexported-name.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.negative-zero-comparison.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.new-expression-with-require.rule.yaml +39 -0
- package/rules/typescript/ts.correctness.new-symbol-instance.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.no-confusing-label-in-switch.rule.yaml +39 -0
- package/rules/typescript/ts.correctness.no-href-with-nuxt-link.rule.yaml +39 -0
- package/rules/typescript/ts.correctness.no-ts-suppress-directive.rule.yaml +36 -0
- package/rules/typescript/ts.correctness.non-existent-assignment-operators.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.off-by-one-loop-boundary.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.parse-int-on-number-literal.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.prefer-as-const-over-literal-type.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.prefer-includes-over-indexof.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.prefer-nullish-coalescing.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.private-member-should-be-readonly.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.promise-reject-non-error.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.prototype-builtin-called-directly.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.reassign-catch-binding.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.reassign-class-member.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.reassign-const-binding.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.reassign-function-declaration.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.regexp-constructor-invalid-pattern.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.regexp-empty-character-class.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.regexp-multicodepoint-character-class.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.regexp-pattern-unusual-control-character.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.regexp-useless-backreference.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.require-outside-import.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.restricted-global-variable.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.restricted-object-property.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.self-assignment.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.setter-return-value.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.simplify-boolean-return.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.sparse-array-literal.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.switch-case-fallthrough.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.template-placeholder-in-string.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.this-before-super.rule.yaml +3 -0
- package/rules/typescript/ts.correctness.this-outside-class.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.undeclared-variable.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.unhandled-async-error.rule.yaml +7 -1
- package/rules/typescript/ts.correctness.unnecessary-return-await.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.unresolved-import.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.unsafe-negation-in-relational.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.unused-expression.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.unused-variable.rule.yaml +37 -0
- package/rules/typescript/ts.correctness.use-number-is-nan.rule.yaml +2 -0
- package/rules/typescript/ts.correctness.used-before-definition.rule.yaml +38 -0
- package/rules/typescript/ts.correctness.var-declaration.rule.yaml +38 -0
- package/rules/typescript/ts.next.no-document-import-outside-custom-document.rule.yaml +39 -0
- package/rules/typescript/ts.next.no-head-import-in-custom-document.rule.yaml +39 -0
- package/rules/typescript/ts.performance.no-await-in-loop.rule.yaml +6 -6
- package/rules/typescript/ts.performance.no-json-parse-stringify-clone.rule.yaml +8 -0
- package/rules/typescript/ts.performance.sequential-async-calls.rule.yaml +16 -7
- package/rules/typescript/ts.quality.no-banned-type.rule.yaml +36 -0
- package/rules/typescript/ts.quality.no-empty-function.rule.yaml +1 -1
- package/rules/typescript/ts.quality.no-side-effect-in-pure-callback.rule.yaml +36 -0
- package/rules/typescript/ts.quality.swallowed-error.rule.yaml +6 -3
- package/rules/typescript/ts.react.no-deprecated-is-mounted.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-deprecated-react-dom-root-api.rule.yaml +24 -2
- package/rules/typescript/ts.react.no-direct-state-mutation.rule.yaml +2 -0
- package/rules/typescript/ts.react.no-duplicate-jsx-attributes.rule.yaml +2 -0
- package/rules/typescript/ts.react.no-hooks-rule-violation.rule.yaml +38 -0
- package/rules/typescript/ts.react.no-invalid-markup-characters.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-lifecycle-method-typo.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-render-invalid-return-type.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-mount.rule.yaml +2 -0
- package/rules/typescript/ts.react.no-set-state-in-component-did-update.rule.yaml +2 -0
- package/rules/typescript/ts.react.no-set-state-in-component-will-update.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-should-component-update.rule.yaml +36 -0
- package/rules/typescript/ts.react.no-target-blank-without-rel.rule.yaml +2 -0
- package/rules/typescript/ts.react.no-this-state-in-set-state.rule.yaml +38 -0
- package/rules/typescript/ts.react.no-unnecessary-fragment.rule.yaml +36 -0
- package/rules/typescript/ts.runtime.no-process-exit.rule.yaml +3 -0
- package/rules/typescript/ts.runtime.process-exit-control-flow.rule.yaml +46 -0
- package/rules/typescript/ts.security.dangerous-insert-html.rule.yaml +5 -0
- package/rules/typescript/ts.security.express-insecure-listen.rule.yaml +52 -0
- package/rules/typescript/ts.security.express-nosql-injection.rule.yaml +16 -11
- package/rules/typescript/ts.security.express-static-dotfiles-allow.rule.yaml +5 -0
- package/rules/typescript/ts.security.iframe-missing-sandbox-attribute.rule.yaml +18 -6
- package/rules/typescript/ts.security.import-using-user-input.rule.yaml +62 -10
- package/rules/typescript/ts.security.insecure-auth-cookie-flags.rule.yaml +12 -4
- package/rules/typescript/ts.security.missing-request-timeout-or-retry.rule.yaml +8 -6
- package/rules/typescript/ts.security.no-assign-mutable-export.rule.yaml +2 -0
- package/rules/typescript/ts.security.no-dynamic-execution.rule.yaml +3 -3
- package/rules/typescript/ts.security.no-javascript-url.rule.yaml +42 -8
- package/rules/typescript/ts.security.no-native-prototype-extension.rule.yaml +13 -1
- package/rules/typescript/ts.security.non-literal-fs-filename.rule.yaml +13 -1
- package/rules/typescript/ts.security.observable-timing-discrepancy.rule.yaml +3 -3
- package/rules/typescript/ts.security.open-redirect.rule.yaml +6 -0
- package/rules/typescript/ts.security.path-join-user-input.rule.yaml +50 -0
- package/rules/typescript/ts.security.sensitive-data-written-to-file.rule.yaml +16 -6
- package/rules/typescript/ts.security.ssrf.rule.yaml +1 -0
- package/rules/typescript/ts.security.unsafe-dirname-path-concat.rule.yaml +3 -0
- package/rules/typescript/ts.security.unsanitized-http-response.rule.yaml +14 -3
- package/rules/typescript/ts.security.user-controlled-regexp.rule.yaml +52 -0
- package/rules/typescript/ts.testing.no-flaky-timer-test.rule.yaml +7 -7
- package/rules/typescript/ts.testing.no-legacy-test-waiter.rule.yaml +36 -0
- package/rules/typescript/ts.testing.no-network-call-in-unit-test.rule.yaml +7 -1
- package/rules/typescript/ts.testing.no-skipped-test-without-ticket.rule.yaml +3 -3
- package/rules/typescript/ts.testing.useless-assertion.rule.yaml +37 -0
- package/rules/typescript/ts.vue.emits-validator-return-boolean.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-browser-globals-in-created.rule.yaml +39 -0
- package/rules/typescript/ts.vue.no-computed-missing-dependency.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-computed-mutation.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-data-object-declaration.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-deprecated-keycodes-config.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-deprecated-listeners.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-deprecated-model-option.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-deprecated-scoped-slots.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-keycode-modifiers.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-reserved-key-overwrite.rule.yaml +36 -0
- package/rules/typescript/ts.vue.no-server-env-in-client-hooks.rule.yaml +39 -0
- package/rules/typescript/ts.vue.no-slot-property-access.rule.yaml +36 -0
- package/rules/typescript/ts.vue.prefer-prop-type-constructor.rule.yaml +36 -0
- package/rules/typescript/ts.vue.require-transition-conditional.rule.yaml +36 -0
|
@@ -4,7 +4,7 @@ metadata:
|
|
|
4
4
|
id: ts.security.observable-timing-discrepancy
|
|
5
5
|
title: Use constant-time secret comparison
|
|
6
6
|
summary: Secrets and tokens should not be compared with ordinary equality operators.
|
|
7
|
-
rationale: Ordinary string comparison can leak timing differences that help attackers guess secret material.
|
|
7
|
+
rationale: Ordinary string comparison can leak timing differences that help attackers guess secret material. Note that the current heuristic is pattern-based without taint tracking and produces false positives on non-secret comparisons.
|
|
8
8
|
detection:
|
|
9
9
|
kind: pattern
|
|
10
10
|
references:
|
|
@@ -32,8 +32,8 @@ match:
|
|
|
32
32
|
emit:
|
|
33
33
|
finding:
|
|
34
34
|
category: security.cryptography
|
|
35
|
-
severity:
|
|
36
|
-
confidence: 0.
|
|
35
|
+
severity: medium
|
|
36
|
+
confidence: 0.55
|
|
37
37
|
tags:
|
|
38
38
|
- security
|
|
39
39
|
- cryptography
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.path-join-user-input
|
|
5
|
+
title: Avoid user-controlled path segments in path.join and path.resolve
|
|
6
|
+
summary: Path construction APIs should not consume request- or upload-derived segments without a trusted root and validation.
|
|
7
|
+
rationale: Joining external input into filesystem paths can enable directory traversal outside the intended base directory.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-22
|
|
13
|
+
title: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Path Traversal
|
|
16
|
+
url: https://owasp.org/www-community/attacks/Path_Traversal
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- filesystem
|
|
20
|
+
- path-traversal
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- typescript
|
|
27
|
+
- javascript
|
|
28
|
+
paths:
|
|
29
|
+
exclude:
|
|
30
|
+
- "**/build/**"
|
|
31
|
+
- "**/scripts/**"
|
|
32
|
+
- "**/docs/**"
|
|
33
|
+
match:
|
|
34
|
+
fact:
|
|
35
|
+
kind: security.path-join-user-input
|
|
36
|
+
bind: issue
|
|
37
|
+
emit:
|
|
38
|
+
finding:
|
|
39
|
+
category: security.filesystem
|
|
40
|
+
severity: high
|
|
41
|
+
confidence: 0.9
|
|
42
|
+
tags:
|
|
43
|
+
- security
|
|
44
|
+
- filesystem
|
|
45
|
+
- path-traversal
|
|
46
|
+
message:
|
|
47
|
+
title: Validate path segments passed to `${captures.issue.text}`
|
|
48
|
+
summary: "`${captures.issue.text}` joins external input into a filesystem path without a validated trusted root."
|
|
49
|
+
remediation:
|
|
50
|
+
summary: Resolve files under a fixed base directory and validate or allowlist user-supplied segments before joining paths.
|
|
@@ -2,9 +2,9 @@ apiVersion: critiq.dev/v1alpha1
|
|
|
2
2
|
kind: Rule
|
|
3
3
|
metadata:
|
|
4
4
|
id: ts.security.sensitive-data-written-to-file
|
|
5
|
-
title:
|
|
6
|
-
summary:
|
|
7
|
-
rationale: Static files, exports, and
|
|
5
|
+
title: Sensitive data written to file
|
|
6
|
+
summary: File writes that persist fields like passwords, tokens, secrets, credentials, or PII (email, SSN, phone) risk data exposure.
|
|
7
|
+
rationale: Static files, exports, backups, and logs are easy to copy or retain beyond their intended lifetime. Sensitive fields should be redacted or excluded before writing.
|
|
8
8
|
detection:
|
|
9
9
|
kind: pattern
|
|
10
10
|
references:
|
|
@@ -25,6 +25,16 @@ scope:
|
|
|
25
25
|
languages:
|
|
26
26
|
- typescript
|
|
27
27
|
- javascript
|
|
28
|
+
paths:
|
|
29
|
+
exclude:
|
|
30
|
+
- "**/test/**"
|
|
31
|
+
- "**/tests/**"
|
|
32
|
+
- "**/__tests__/**"
|
|
33
|
+
- "**/*.test.*"
|
|
34
|
+
- "**/*.spec.*"
|
|
35
|
+
- "**/scripts/**"
|
|
36
|
+
- "**/deprecated-packages/**"
|
|
37
|
+
- "**/benchmarks/**"
|
|
28
38
|
match:
|
|
29
39
|
fact:
|
|
30
40
|
kind: security.sensitive-data-written-to-file
|
|
@@ -32,7 +42,7 @@ match:
|
|
|
32
42
|
emit:
|
|
33
43
|
finding:
|
|
34
44
|
category: security.privacy
|
|
35
|
-
severity:
|
|
45
|
+
severity: medium
|
|
36
46
|
confidence: 0.9
|
|
37
47
|
tags:
|
|
38
48
|
- security
|
|
@@ -40,8 +50,8 @@ emit:
|
|
|
40
50
|
- filesystem
|
|
41
51
|
message:
|
|
42
52
|
title: Remove sensitive fields before `${captures.issue.text}`
|
|
43
|
-
summary: "`${captures.issue.text}` writes sensitive
|
|
53
|
+
summary: "`${captures.issue.text}` writes data containing sensitive fields (password, token, secret, credential, email, SSN, phone) to a file. This risks data exposure if the file is leaked, backed up, or retained beyond its intended lifetime."
|
|
44
54
|
remediation:
|
|
45
|
-
summary:
|
|
55
|
+
summary: Remove sensitive fields (passwords, tokens, secrets, credentials, email, SSN, phone) before writing to a file. Destructure to exclude them, or hash/encrypt the values. Build scripts, benchmarks, test fixtures, and deprecated packages are exempt.
|
|
46
56
|
|
|
47
57
|
|
|
@@ -14,10 +14,13 @@ metadata:
|
|
|
14
14
|
- kind: owasp
|
|
15
15
|
title: File Upload Cheat Sheet
|
|
16
16
|
url: https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
|
|
17
|
+
aliases:
|
|
18
|
+
- JS-0262
|
|
17
19
|
tags:
|
|
18
20
|
- security
|
|
19
21
|
- filesystem
|
|
20
22
|
- rules-catalog
|
|
23
|
+
- public-directory-parity
|
|
21
24
|
stability: stable
|
|
22
25
|
appliesTo: block
|
|
23
26
|
scope:
|
|
@@ -2,8 +2,8 @@ apiVersion: critiq.dev/v1alpha1
|
|
|
2
2
|
kind: Rule
|
|
3
3
|
metadata:
|
|
4
4
|
id: ts.security.unsanitized-http-response
|
|
5
|
-
title: Avoid
|
|
6
|
-
summary: Raw response
|
|
5
|
+
title: Avoid raw response output driven by request input
|
|
6
|
+
summary: Raw response sinks should not echo request data without escaping or sanitization. JSON.stringify and JSON responses are excluded — their output is not executable markup.
|
|
7
7
|
rationale: Directly reflecting request data into HTML-capable response sinks creates reflected XSS and content injection risk.
|
|
8
8
|
detection:
|
|
9
9
|
kind: pattern
|
|
@@ -25,6 +25,17 @@ scope:
|
|
|
25
25
|
languages:
|
|
26
26
|
- typescript
|
|
27
27
|
- javascript
|
|
28
|
+
paths:
|
|
29
|
+
exclude:
|
|
30
|
+
- "**/sandbox/**"
|
|
31
|
+
- "**/tests/setup/**"
|
|
32
|
+
- "**/tests/smoke/**"
|
|
33
|
+
- "**/e2e/**"
|
|
34
|
+
- "**/*.test.*"
|
|
35
|
+
- "**/*.spec.*"
|
|
36
|
+
- "**/__tests__/**"
|
|
37
|
+
- "**/test/**"
|
|
38
|
+
- "**/tests/**"
|
|
28
39
|
match:
|
|
29
40
|
fact:
|
|
30
41
|
kind: security.unsanitized-http-response
|
|
@@ -32,7 +43,7 @@ match:
|
|
|
32
43
|
emit:
|
|
33
44
|
finding:
|
|
34
45
|
category: security.output-encoding
|
|
35
|
-
severity:
|
|
46
|
+
severity: medium
|
|
36
47
|
confidence: 0.88
|
|
37
48
|
tags:
|
|
38
49
|
- security
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.security.user-controlled-regexp
|
|
5
|
+
title: Avoid user-controlled regular expression patterns
|
|
6
|
+
summary: Regular expression construction should not consume request-derived pattern strings without validation.
|
|
7
|
+
rationale: Attacker-controlled regex patterns can trigger catastrophic backtracking and block the Node.js event loop.
|
|
8
|
+
detection:
|
|
9
|
+
kind: pattern
|
|
10
|
+
references:
|
|
11
|
+
- kind: cwe
|
|
12
|
+
id: CWE-1333
|
|
13
|
+
title: Inefficient Regular Expression Complexity
|
|
14
|
+
- kind: owasp
|
|
15
|
+
title: Denial of Service Cheat Sheet
|
|
16
|
+
url: https://cheatsheetseries.owasp.org/cheatsheets/Denial_of_Service_Cheat_Sheet.html
|
|
17
|
+
tags:
|
|
18
|
+
- security
|
|
19
|
+
- redos
|
|
20
|
+
- input-validation
|
|
21
|
+
- rules-catalog
|
|
22
|
+
stability: stable
|
|
23
|
+
appliesTo: block
|
|
24
|
+
scope:
|
|
25
|
+
languages:
|
|
26
|
+
- typescript
|
|
27
|
+
- javascript
|
|
28
|
+
paths:
|
|
29
|
+
exclude:
|
|
30
|
+
- "**/build/**"
|
|
31
|
+
- "**/scripts/**"
|
|
32
|
+
- "**/docs/**"
|
|
33
|
+
- "**/vendor/**"
|
|
34
|
+
- "**/lib/**"
|
|
35
|
+
match:
|
|
36
|
+
fact:
|
|
37
|
+
kind: security.user-controlled-regexp
|
|
38
|
+
bind: issue
|
|
39
|
+
emit:
|
|
40
|
+
finding:
|
|
41
|
+
category: security.input-validation
|
|
42
|
+
severity: medium
|
|
43
|
+
confidence: 0.84
|
|
44
|
+
tags:
|
|
45
|
+
- security
|
|
46
|
+
- redos
|
|
47
|
+
- input-validation
|
|
48
|
+
message:
|
|
49
|
+
title: Validate regex pattern before `${captures.issue.text}`
|
|
50
|
+
summary: "`${captures.issue.text}` builds a regular expression from request-controlled input."
|
|
51
|
+
remediation:
|
|
52
|
+
summary: Use fixed or allowlisted regex patterns, or validate and bound user-supplied patterns before compiling them.
|
|
@@ -2,9 +2,9 @@ apiVersion: critiq.dev/v1alpha1
|
|
|
2
2
|
kind: Rule
|
|
3
3
|
metadata:
|
|
4
4
|
id: ts.testing.no-flaky-timer-test
|
|
5
|
-
title:
|
|
6
|
-
summary:
|
|
7
|
-
rationale: Wall-clock
|
|
5
|
+
title: Avoid timer-dependent assertions in unit tests
|
|
6
|
+
summary: Unit tests using real timers (setTimeout/setInterval with delays >50ms) without fake timers may produce flaky results under CI load.
|
|
7
|
+
rationale: Wall-clock-based tests race CI load and parallelization; fake timers keep behavior deterministic. Performance measurement (performance.now, Date.now) and sub-50ms micro-delays for event-loop yielding are exempt.
|
|
8
8
|
tags:
|
|
9
9
|
- testing
|
|
10
10
|
- quality
|
|
@@ -27,12 +27,12 @@ emit:
|
|
|
27
27
|
finding:
|
|
28
28
|
category: quality.testing
|
|
29
29
|
severity: low
|
|
30
|
-
confidence: 0.
|
|
30
|
+
confidence: 0.55
|
|
31
31
|
tags:
|
|
32
32
|
- testing
|
|
33
33
|
- timers
|
|
34
34
|
message:
|
|
35
|
-
title:
|
|
36
|
-
summary: "`${captures.issue.text}` uses real timers
|
|
35
|
+
title: Timer-dependent assertion without fake timers in `${captures.issue.text}`
|
|
36
|
+
summary: "`${captures.issue.text}` uses real timers with a delay >50ms without `jest.useFakeTimers` / `vi.useFakeTimers` in the same file. Micro-delays (<=50ms) and performance clocks (performance.now, Date.now) are not flagged."
|
|
37
37
|
remediation:
|
|
38
|
-
summary: Enable fake timers for the suite, inject a clock abstraction, or move timing assertions behind a test double.
|
|
38
|
+
summary: Enable fake timers for the suite, inject a clock abstraction, or move timing-dependent assertions behind a test double. If the delay is intentional for testing a timeout path, consider using jest.advanceTimersByTime instead of real waits.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.testing.no-legacy-test-waiter
|
|
5
|
+
title: Avoid legacy test waiters
|
|
6
|
+
summary: Deprecated test waiting APIs like wait(), waitForElement(), and waitForDomChange() should be replaced with waitFor().
|
|
7
|
+
rationale: These APIs were removed in React Testing Library v13+ and create brittle, timing-dependent tests. The modern waitFor() API provides a more reliable and consistent approach to waiting for asynchronous DOM changes.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0794
|
|
10
|
+
tags:
|
|
11
|
+
- testing
|
|
12
|
+
- quality
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: testing.legacy-waiter
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: quality.testing
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.82
|
|
29
|
+
tags:
|
|
30
|
+
- testing
|
|
31
|
+
- migration
|
|
32
|
+
message:
|
|
33
|
+
title: Replace legacy test waiter with waitFor
|
|
34
|
+
summary: "${captures.issue.text} uses a deprecated testing-library waiter API. Use waitFor() instead."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Replace wait(), waitForElement(), or waitForDomChange() calls with waitFor() from the same testing-library package.
|
|
@@ -18,7 +18,13 @@ scope:
|
|
|
18
18
|
paths:
|
|
19
19
|
exclude:
|
|
20
20
|
- "**/e2e/**"
|
|
21
|
+
- "**/browser/**"
|
|
22
|
+
- "**/smoke/**"
|
|
23
|
+
- "**/sandbox/**"
|
|
24
|
+
- "**/setup/**"
|
|
21
25
|
- "**/*.integration.test.*"
|
|
26
|
+
- "**/*.browser.test.*"
|
|
27
|
+
- "**/*.smoke.test.*"
|
|
22
28
|
match:
|
|
23
29
|
fact:
|
|
24
30
|
kind: testing.real-network-in-unit-test
|
|
@@ -26,7 +32,7 @@ match:
|
|
|
26
32
|
emit:
|
|
27
33
|
finding:
|
|
28
34
|
category: quality.testing
|
|
29
|
-
severity:
|
|
35
|
+
severity: low
|
|
30
36
|
confidence: 0.74
|
|
31
37
|
tags:
|
|
32
38
|
- testing
|
|
@@ -28,7 +28,7 @@ emit:
|
|
|
28
28
|
- testing
|
|
29
29
|
- coverage
|
|
30
30
|
message:
|
|
31
|
-
title:
|
|
32
|
-
summary: "`${captures.issue.text}` skips a test without
|
|
31
|
+
title: Skipped test lacks adequate justification — add a reason, ticket, or comment
|
|
32
|
+
summary: "`${captures.issue.text}` skips a test without a descriptive name, explicit reason string, ticket reference, or explanatory comment."
|
|
33
33
|
remediation:
|
|
34
|
-
summary:
|
|
34
|
+
summary: Add a descriptive test name, explicit reason string, ticket reference, or explanatory comment to document why this test is skipped.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.testing.useless-assertion
|
|
5
|
+
title: Useless assertion testing a constant value
|
|
6
|
+
summary: Assertions that compare a static primitive literal against itself will never fail.
|
|
7
|
+
rationale: "`expect(true).toBe(true)` or similar tautological assertions always pass regardless of code behavior. They indicate leftover debug code or a mistaken test."
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-W1039
|
|
10
|
+
tags:
|
|
11
|
+
- testing
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
- public-directory-parity
|
|
15
|
+
stability: experimental
|
|
16
|
+
appliesTo: block
|
|
17
|
+
scope:
|
|
18
|
+
languages:
|
|
19
|
+
- typescript
|
|
20
|
+
- javascript
|
|
21
|
+
match:
|
|
22
|
+
fact:
|
|
23
|
+
kind: testing.useless-assertion
|
|
24
|
+
bind: issue
|
|
25
|
+
emit:
|
|
26
|
+
finding:
|
|
27
|
+
category: quality.testing
|
|
28
|
+
severity: medium
|
|
29
|
+
confidence: 0.95
|
|
30
|
+
tags:
|
|
31
|
+
- testing
|
|
32
|
+
- quality
|
|
33
|
+
message:
|
|
34
|
+
title: Useless assertion
|
|
35
|
+
summary: "`${captures.issue.text}` is a tautological assertion that always passes."
|
|
36
|
+
remediation:
|
|
37
|
+
summary: Replace the assertion with a meaningful check against actual runtime values, or remove dead test code.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.emits-validator-return-boolean
|
|
5
|
+
title: Emits validators must return a boolean
|
|
6
|
+
summary: "Emit event validators are expected to return a boolean value indicating whether the event payload is valid."
|
|
7
|
+
rationale: Vue emits validators, like prop validators, are expected to return a boolean. Returning non-boolean values or omitting the return statement can lead to unexpected behavior. Validators that return nothing or return non-boolean values make the emit always appear valid.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0660
|
|
10
|
+
tags:
|
|
11
|
+
- vue
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: framework.vue.emits-validator-return
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.ui
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.75
|
|
29
|
+
tags:
|
|
30
|
+
- vue
|
|
31
|
+
- correctness
|
|
32
|
+
message:
|
|
33
|
+
title: Return boolean from emits validator
|
|
34
|
+
summary: "${captures.issue.text} has an emits validator that does not return a boolean. Add a boolean return statement."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: "Ensure each emits validator function returns a boolean value. For example: `emits: { submit: (payload) => { return typeof payload === 'string'; } }`."
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.no-browser-globals-in-created
|
|
5
|
+
title: Avoid browser globals in server-side lifecycle hooks
|
|
6
|
+
summary: The created and beforeCreate hooks may run on the server during SSR; accessing window or document there causes errors.
|
|
7
|
+
rationale: In Nuxt and other SSR Vue frameworks, the created and beforeCreate hooks execute on both server and client. Accessing browser-only globals like window or document in these hooks will throw ReferenceError during SSR. Move browser access to mounted() or use client-side guards.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-E1001
|
|
10
|
+
tags:
|
|
11
|
+
- nuxt
|
|
12
|
+
- vue
|
|
13
|
+
- correctness
|
|
14
|
+
- rules-catalog
|
|
15
|
+
- public-directory-parity
|
|
16
|
+
stability: experimental
|
|
17
|
+
appliesTo: file
|
|
18
|
+
scope:
|
|
19
|
+
languages:
|
|
20
|
+
- typescript
|
|
21
|
+
- javascript
|
|
22
|
+
match:
|
|
23
|
+
fact:
|
|
24
|
+
kind: framework.nuxt.browser-global-in-created-lifecycle
|
|
25
|
+
bind: issue
|
|
26
|
+
emit:
|
|
27
|
+
finding:
|
|
28
|
+
category: correctness.framework
|
|
29
|
+
severity: high
|
|
30
|
+
confidence: 0.85
|
|
31
|
+
tags:
|
|
32
|
+
- nuxt
|
|
33
|
+
- vue
|
|
34
|
+
- correctness
|
|
35
|
+
message:
|
|
36
|
+
title: Move browser global access out of server-side hook
|
|
37
|
+
summary: "`${captures.issue.text}` accesses a browser global in a server-side lifecycle hook."
|
|
38
|
+
remediation:
|
|
39
|
+
summary: Move window/document access to mounted() or guard with process.client check.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.no-computed-missing-dependency
|
|
5
|
+
title: Declare external dependencies in computed properties
|
|
6
|
+
summary: Vue computed properties referencing data Vue cannot reactively track should declare explicit dependencies.
|
|
7
|
+
rationale: Vue 2 computed properties auto-track reactive dependencies accessed via `this.*` but cannot track module-level variables, window properties, or other non-reactive sources. Explicit `dependencies` arrays make the dependency contract visible and prevent stale computed values.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0813
|
|
10
|
+
tags:
|
|
11
|
+
- vue
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: framework.vue.computed-missing-dependency
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.ui
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.72
|
|
29
|
+
tags:
|
|
30
|
+
- vue
|
|
31
|
+
- correctness
|
|
32
|
+
message:
|
|
33
|
+
title: Computed property references external dependency
|
|
34
|
+
summary: "Computed property `${captures.issue.text}` references external data that Vue cannot reactively track."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Add an explicit `dependencies` array to the computed property, or move the external reference to a reactive data property.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.no-computed-mutation
|
|
5
|
+
title: Avoid mutating variables inside computed properties
|
|
6
|
+
summary: Computed properties should not produce side effects such as assignments or array mutations.
|
|
7
|
+
rationale: Vue computed properties must be pure functions that derive values from reactive data. Mutations inside computed getters violate the unidirectional data flow model and create unpredictable reactivity behavior.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0615
|
|
10
|
+
tags:
|
|
11
|
+
- vue
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: framework.vue.computed-mutation
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.ui
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.80
|
|
29
|
+
tags:
|
|
30
|
+
- vue
|
|
31
|
+
- correctness
|
|
32
|
+
message:
|
|
33
|
+
title: Avoid mutation inside computed property
|
|
34
|
+
summary: "${captures.issue.text} mutates state inside a computed property getter."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: Move the mutation to a method, watch, or action. Computed properties should only read reactive state and return a derived value.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.no-data-object-declaration
|
|
5
|
+
title: Deprecation of Object Declaration on data
|
|
6
|
+
summary: The `data` option in Vue components must be a function, not an object literal, to avoid shared state across instances.
|
|
7
|
+
rationale: When `data` is declared as a plain object, all component instances share the same reference. This causes cross-instance state corruption. Vue requires `data` to be a function that returns a fresh object for each instance.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0629
|
|
10
|
+
tags:
|
|
11
|
+
- vue
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: framework.vue.data-object-declaration
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.ui
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.95
|
|
29
|
+
tags:
|
|
30
|
+
- vue
|
|
31
|
+
- correctness
|
|
32
|
+
message:
|
|
33
|
+
title: Replace object literal data with a function
|
|
34
|
+
summary: "${captures.issue.text} declares data as a plain object. Use a function that returns the object instead."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: "Change `data: { ... }` to `data() { return { ... }; }` to ensure each component instance gets its own reactive state."
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.no-deprecated-keycodes-config
|
|
5
|
+
title: Avoid deprecated Vue.config.keyCodes
|
|
6
|
+
summary: "Vue.config.keyCodes was removed in Vue 3. Use key alias modifiers directly instead."
|
|
7
|
+
rationale: Vue 2 allowed custom keycode aliases via `Vue.config.keyCodes`. Vue 3 removes this API entirely and requires the use of standard key names. Directly reference key names with `@keyup.enter` rather than configuring custom numeric mappings.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0657
|
|
10
|
+
tags:
|
|
11
|
+
- vue
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: framework.vue.deprecated-keycodes-config
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.ui
|
|
27
|
+
severity: high
|
|
28
|
+
confidence: 0.90
|
|
29
|
+
tags:
|
|
30
|
+
- vue
|
|
31
|
+
- correctness
|
|
32
|
+
message:
|
|
33
|
+
title: Replace Vue.config.keyCodes with key alias modifiers
|
|
34
|
+
summary: "${captures.issue.text} uses the deprecated Vue.config.keyCodes API. Use key alias modifiers instead."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: "Remove `Vue.config.keyCodes` assignments. Reference key names directly in templates using `@keyup.enter`, `@keyup.escape`, or other standard key aliases supported by Vue 3."
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apiVersion: critiq.dev/v1alpha1
|
|
2
|
+
kind: Rule
|
|
3
|
+
metadata:
|
|
4
|
+
id: ts.vue.no-deprecated-listeners
|
|
5
|
+
title: Prefer $attrs over $listeners
|
|
6
|
+
summary: "$listeners was deprecated in Vue 3. Use $attrs instead, which now includes both attributes and listeners."
|
|
7
|
+
rationale: Vue 3 merges `$listeners` into `$attrs`, making the separate `$listeners` property obsolete. All event listeners passed to a component are now accessible via `$attrs.onXxx` or through the `inheritAttrs` mechanism.
|
|
8
|
+
aliases:
|
|
9
|
+
- JS-0655
|
|
10
|
+
tags:
|
|
11
|
+
- vue
|
|
12
|
+
- correctness
|
|
13
|
+
- rules-catalog
|
|
14
|
+
stability: experimental
|
|
15
|
+
appliesTo: block
|
|
16
|
+
scope:
|
|
17
|
+
languages:
|
|
18
|
+
- typescript
|
|
19
|
+
- javascript
|
|
20
|
+
match:
|
|
21
|
+
fact:
|
|
22
|
+
kind: framework.vue.deprecated-listeners
|
|
23
|
+
bind: issue
|
|
24
|
+
emit:
|
|
25
|
+
finding:
|
|
26
|
+
category: correctness.ui
|
|
27
|
+
severity: medium
|
|
28
|
+
confidence: 0.70
|
|
29
|
+
tags:
|
|
30
|
+
- vue
|
|
31
|
+
- correctness
|
|
32
|
+
message:
|
|
33
|
+
title: Replace $listeners with $attrs
|
|
34
|
+
summary: "${captures.issue.text} uses the deprecated $listeners API. Use $attrs instead."
|
|
35
|
+
remediation:
|
|
36
|
+
summary: "Replace `this.$listeners` with `this.$attrs`. In Vue 3, listeners are merged into `$attrs` and can be forwarded with `v-bind=\"$attrs\"`."
|