npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

eslint-plugin-deslop

v0.3.3

Published

ESLint plugin to detect and remove AI-generated code slop

Downloads

919

Readme

eslint-plugin-deslop

ESLint plugin to detect and remove AI-generated code slop.

What is "slop"?

AI-generated code often includes patterns that human developers wouldn't write:

  • Excessive or obvious comments that restate what the code does

This plugin focuses on unique AI-slop patterns not covered by other ESLint plugins.

Features

  • 🎯 2 working rules that catch common AI-generated patterns
  • 🔧 Auto-fixable - Use eslint --fix to automatically remove slop
  • ⚙️ Configurable - Customize thresholds and patterns to match your needs
  • Zero dependencies - Pure ESLint plugin
  • 🎨 Recommended config - Get started quickly with sensible defaults

Installation

npm install --save-dev eslint-plugin-deslop

Usage

Add to your ESLint config:

// eslint.config.js (Flat Config)
import deslop from "eslint-plugin-deslop";

export default [
  {
    plugins: {
      deslop,
    },
    rules: {
      "deslop/no-excessive-comments": "warn",
      "deslop/no-obvious-comments": "warn",
    },
  },
];

Or use the recommended config:

// eslint.config.js (Flat Config)
import deslop from "eslint-plugin-deslop";

export default [
  ...deslop.configs.recommended,
];

The recommended config enables both rules with sensible defaults:

  • deslop/no-excessive-comments: warn (30% max density)
  • deslop/no-obvious-comments: warn

Rules

no-excessive-comments

Detects and removes excessive comment density inside function bodies (>30% by default).

Fixable: Yes (with --fix)

// ❌ Bad (flagged by this rule - high comment density)
function processUser(user) {
  // Get user name
  const name = user.name;
  // Return the name
  return name;
}

// ✅ Good (low comment density)
function processUser(user) {
  const name = user.name;
  return name;
}

Options:

{
  "deslop/no-excessive-comments": ["warn", {
    "maxDensity": 0.3  // Default: 0.3 (30%)
  }]
}
  • maxDensity (number, 0-1): Maximum allowed comment-to-code ratio. Default is 0.3 (30%).

Examples:

// Set to 20% for stricter checking
"deslop/no-excessive-comments": ["warn", { "maxDensity": 0.2 }]

// Set to 50% for more lenient checking
"deslop/no-excessive-comments": ["warn", { "maxDensity": 0.5 }]

no-obvious-comments

Detects comments that obviously restate what the code does.

Fixable: Yes (with --fix)

// ❌ Bad (flagged by this rule)
// Initialize counter
let counter = 0;

// Returns the user name
function getUserName() {}

/**
 * Gets the user name
 * @param user - The user object
 * @returns The user name
 */
function getUserName(user) {}

// ✅ Good (no obvious comments)
let counter = 0;
function getUserName() {}

Options:

{
  "deslop/no-obvious-comments": ["warn", {
    "customPatterns": [],      // Default: []
    "checkVariableNames": true // Default: true
  }]
}
  • customPatterns (array of strings): Additional regex patterns to flag as obvious comments.
  • checkVariableNames (boolean): Whether to flag comments that contain the variable name they're describing. Default is true.

Examples:

// Add custom patterns to detect
"deslop/no-obvious-comments": ["warn", {
  "customPatterns": [
    "^perform\\s+action",  // Flags "Perform action on data"
    "^execute\\s+(the|a)"  // Flags "Execute the task"
  ]
}]

// Disable variable name checking
"deslop/no-obvious-comments": ["warn", {
  "checkVariableNames": false
}]

Built-in patterns detected:

  • Basic actions: initialize, create, set, get, return, check, validate, update, delete
  • Function descriptions: this function, this method, this will
  • Accessors: constructor for, getter for, setter for
  • Verb phrases: returns the/a/an, checks if, sets the, gets the
  • Explanatory filler: note that, it's important to, please note, the following code, this is a helper function to, we use this to
  • Step markers: step 1, first,, then,, finally,, 1. do something
  • Loop/iteration: loop through, iterate over, for each element
  • Conditionals: if condition is met, check condition, handle error, catch exception
  • JSDoc/TSDoc slop: Trivial doc comments like /** Gets the user name */
  • Redundant block comments: Short block comments that restate code

License

MIT