{"slug": "anti-slop-opinionated-oxlint-rules", "title": "anti-slop: Opinionated Oxlint rules", "summary": "Developer Dillon Mulroy released anti-slop, an open-source (MIT) plugin of opinionated Oxlint rules that reject low-evidence and low-signal TypeScript and JavaScript patterns, distributed via source and an npx skill installer. The plugin ships 10 rules including no-chained-type-assertions, no-conditional-empty-object-spread, and no-unknown-parameters, and is configured through oxlint.config.ts with jsPlugins. An npm release is planned, and the skill copies the plugin, installs current Oxlint dependencies, merges the plugin into existing lint configuration, enables every rule, and validates the result.", "body_md": "Opinionated Oxlint rules that reject low-evidence and low-signal TypeScript and JavaScript patterns.\n\nThe 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.\n\n```\nnpx skills add dmmulroy/anti-slop --skill install-anti-slop\n```\n\nThen 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.\n\nTo inspect available skills first:\n\n```\nnpx skills add dmmulroy/anti-slop --list\n```\n\nCopy `src/`\n\ninto the target repository, for example at `tools/oxlint/anti-slop/`\n\n, and install matching current versions of `oxlint`\n\nand `@oxlint/plugins`\n\n.\n\nRegister the copied entry point in `oxlint.config.ts`\n\n:\n\n``` js\nimport { defineConfig } from \"oxlint\";\n\nexport default defineConfig({\n  jsPlugins: [\n    { name: \"anti-slop\", specifier: \"./tools/oxlint/anti-slop/index.ts\" },\n  ],\n  rules: {\n    \"anti-slop/no-chained-type-assertions\": \"error\",\n    \"anti-slop/no-conditional-empty-object-spread\": \"error\",\n    \"anti-slop/no-known-value-widening\": \"error\",\n    \"anti-slop/no-object-parameters\": \"error\",\n    \"anti-slop/no-runtime-typeof\": \"error\",\n    \"anti-slop/no-shape-in-symbol-names\": \"error\",\n    \"anti-slop/no-unknown-parameters\": \"error\",\n    \"anti-slop/no-unknown-type-aliases\": \"error\",\n    \"anti-slop/no-unsafe-dictionary-type\": \"error\",\n    \"anti-slop/no-widen-then-assert\": \"error\"\n  }\n});\n```\n\nThe same `jsPlugins`\n\nentry and rules work under `lint`\n\nin a Vite+ config.\n\n`no-chained-type-assertions`\n\n— rejects nested type assertions that fabricate evidence.`no-conditional-empty-object-spread`\n\n— rejects conditional spreads that use`{}`\n\nto omit fields.`no-known-value-widening`\n\n— rejects explicit broad target types that discard known value evidence.`no-object-parameters`\n\n— rejects the broad`object`\n\ntype on function inputs.`no-runtime-typeof`\n\n— requires boundary parsing instead of ad hoc`typeof`\n\nnarrowing.`no-shape-in-symbol-names`\n\n— rejects`shape`\n\nin symbol names.`no-unknown-parameters`\n\n— rejects`unknown`\n\ninputs except the explicit`cause`\n\nconvention.`no-unknown-type-aliases`\n\n— rejects aliases that merely conceal`unknown`\n\n.`no-unsafe-dictionary-type`\n\n— rejects dictionary value contracts based on`unknown`\n\n,`any`\n\n,`object`\n\n,`{}`\n\n, and semantic equivalents.`no-widen-then-assert`\n\n— rejects local flows that widen known values and later assert them back.\n\n```\npnpm install\npnpm check\n```\n\n`src/`\n\nis canonical. After changing production source, run `pnpm sync:skill-assets`\n\n; CI checks that the skill's bundled copy remains identical.\n\nMIT", "url": "https://wpnews.pro/news/anti-slop-opinionated-oxlint-rules", "canonical_source": "https://github.com/dmmulroy/anti-slop", "published_at": "2026-08-12 14:07:47+00:00", "updated_at": "2026-08-12 14:13:34.359295+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Dillon Mulroy", "anti-slop", "Oxlint", "TypeScript", "JavaScript", "npm"], "alternates": {"html": "https://wpnews.pro/news/anti-slop-opinionated-oxlint-rules", "markdown": "https://wpnews.pro/news/anti-slop-opinionated-oxlint-rules.md", "text": "https://wpnews.pro/news/anti-slop-opinionated-oxlint-rules.txt", "jsonld": "https://wpnews.pro/news/anti-slop-opinionated-oxlint-rules.jsonld"}}