GitHub - dmmulroy/anti-slop: Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns · GitHub
/" data-turbo-transient="true" />
Skip to content
Type / to search
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
dmmulroy
anti-slop
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star<br>16
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>1 Commit<br>1 Commit
.github/workflows
.github/workflows
scripts
scripts
skills/install-anti-slop
skills/install-anti-slop
src
src
.gitignore
.gitignore
AGENTS.md
AGENTS.md
LICENSE
LICENSE
README.md
README.md
package.json
package.json
pnpm-lock.yaml
pnpm-lock.yaml
tsconfig.json
tsconfig.json
View all files
Repository files navigation
anti-slop
Opinionated Oxlint rules that reject low-evidence and low-signal TypeScript and JavaScript patterns.
The plugin is source-distributed for now. An npm release is planned; until then, use the bundled agent skill to copy and configure it in another repository.
Install with an agent skill
npx skills add dmmulroy/anti-slop --skill install-anti-slop
Then ask your coding agent to install or configure anti-slop in the current repository. The skill copies the plugin, installs current Oxlint dependencies, merges the plugin into the existing lint configuration, enables every rule, and validates the result.
To inspect available skills first:
npx skills add dmmulroy/anti-slop --list
Manual local installation
Copy src/ into the target repository, for example at tools/oxlint/anti-slop/, and install matching current versions of oxlint and @oxlint/plugins.
Register the copied entry point in oxlint.config.ts:
import { defineConfig } from "oxlint";
export default defineConfig({<br>jsPlugins: [<br>{ name: "anti-slop", specifier: "./tools/oxlint/anti-slop/index.ts" },<br>],<br>rules: {<br>"anti-slop/no-chained-type-assertions": "error",<br>"anti-slop/no-conditional-empty-object-spread": "error",<br>"anti-slop/no-known-value-widening": "error",<br>"anti-slop/no-object-parameters": "error",<br>"anti-slop/no-runtime-typeof": "error",<br>"anti-slop/no-shape-in-symbol-names": "error",<br>"anti-slop/no-unknown-parameters": "error",<br>"anti-slop/no-unknown-type-aliases": "error",<br>"anti-slop/no-unsafe-dictionary-type": "error",<br>"anti-slop/no-widen-then-assert": "error"<br>});
The same jsPlugins entry and rules work under lint in a Vite+ config.
Rules
no-chained-type-assertions — rejects nested type assertions that fabricate evidence.
no-conditional-empty-object-spread — rejects conditional spreads that use {} to omit fields.
no-known-value-widening — rejects explicit broad target types that discard known value evidence.
no-object-parameters — rejects the broad object type on function inputs.
no-runtime-typeof — requires boundary parsing instead of ad hoc typeof narrowing.
no-shape-in-symbol-names — rejects shape in symbol names.
no-unknown-parameters — rejects unknown inputs except the explicit cause convention.
no-unknown-type-aliases — rejects aliases that merely conceal unknown.
no-unsafe-dictionary-type — rejects dictionary value contracts based on unknown, any, object, {}, and semantic equivalents.
no-widen-then-assert — rejects local flows that widen known values and later assert them back.
Development
pnpm install<br>pnpm check
src/ is canonical. After changing production source, run pnpm sync:skill-assets; CI checks that the skill's bundled copy remains identical.
License
MIT
About<br>Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns<br>Topics<br>agent-skillslintingoxlinttypescript<br>Resources<br>Readme<br>MIT license<br>Activity<br>Stars<br>16 stars<br>Watchers<br>1 watching<br>Forks<br>0 forks<br>Report repository
Releases
Packages
Contributors
Languages
You can’t perform that action at this time.