---
title: Anti-Slop Plugin
description: "The bundled anti-slop plugin — original rules for patterns that don't fit any upstream ESLint plugin."
type: package
package: "@zap-studio/oxlint"
---

`anti-slop` is bundled directly in `oxlint`, not wrapped from an upstream ESLint plugin. It's included in [`base`](/oxlint/presets) — and therefore every preset built on it — and catches patterns that lose type evidence or swap a real implementation for something that only looks like one.

## Rules

| Rule                                        | Catches                                                                                    |
| ------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `no-chained-type-assertions`                | Nested type assertions, while still permitting chains made only of const assertions        |
| `no-conditional-empty-object-spread`        | Conditional empty-object spreads that change omission semantics                            |
| `no-known-value-widening`                   | Syntactic cases where a known value is explicitly widened and loses evidence               |
| `no-module-mocking`                         | Test-framework module mocking, in favor of real dependency seams                           |
| `no-object-parameters`                      | The broad `object` type on function inputs, including local aliases to it                  |
| `no-reflect-apply`                          | `Reflect.apply`, which bypasses ordinary typed function calls                              |
| `no-reflect-get`                            | `Reflect.get`, which bypasses ordinary property access and useful type evidence            |
| `no-shape-in-symbol-names`                  | The case-insensitive substring "shape" in any JS/TS symbol name                            |
| `no-unknown-parameters`                     | Unknown-typed inputs, except explicitly named error-cause enrichment                       |
| `no-unknown-returns`                        | Function contracts that return `unknown` instead of a parsed domain type                   |
| `no-unknown-type-aliases`                   | Named aliases that merely conceal TypeScript's `unknown` top type                          |
| `no-unsafe-dictionary-type`                 | Object-dictionary contracts whose direct value type is an unsafe escape hatch              |
| `no-widen-then-assert`                      | Immutable local bindings that erase a known type, later asserted back to a narrower type   |
| `require-safety-comment-for-type-assertion` | Non-const type assertions missing a comment stating the invariant TypeScript can't express |

## License

`anti-slop` ships under its own MIT license, bundled at [`src/anti-slop/LICENSE`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/anti-slop/LICENSE) inside the package.
