Skip to main content

Python AI Slop Detector - Find over-engineering, hallucinations, and dead code

Project description

๐Ÿท Sloppy

Detect AI-generated code anti-patterns in your Python codebase.

PyPI Python 3.9+ License: MIT


โšก Quick Start

pip install sloppylint

sloppylint .

# Output:
# CRITICAL (2 issues)
# ============================================================
#   src/api.py:23  mutable_default_arg
#     Mutable default argument - use None instead
#     > def process(items=[]):
#
#   src/db.py:15  bare_except
#     Bare except catches everything including SystemExit
#     > except:
#
# SLOPPY INDEX
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# Information Utility (Noise)    : 24 pts
# Information Quality (Lies)     : 105 pts
# Style / Taste (Soul)           : 31 pts
# Structural Issues              : 45 pts
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# TOTAL SLOP SCORE               : 205 pts
#
# Verdict: SLOPPY

๐ŸŽฏ What It Catches

The Three Axes of AI Slop

Axis What It Detects Examples
๐Ÿ“ข Noise Debug artifacts, redundant comments print(), # increment x above x += 1
๐Ÿคฅ Lies Hallucinations, placeholders def process(): pass, mutable defaults
๐Ÿ’€ Soul Over-engineering, bad style God functions, deep nesting, hedging comments
๐Ÿ—๏ธ Structure Anti-patterns Bare except, star imports, single-method classes

๐Ÿ“ฅ What You Put In

# Scan a directory
sloppylint src/

# Scan specific files
sloppylint app.py utils.py

# Only high severity issues
sloppylint --severity high

# CI mode - exit 1 if issues found
sloppylint --ci --max-score 50

# Export JSON report
sloppylint --output report.json

๐Ÿ“ค What You Get Out

Output Description
๐ŸŽฏ Issues by Severity Critical, High, Medium, Low
๐Ÿ“Š Slop Score Points breakdown by axis
๐Ÿ“‹ Verdict CLEAN / ACCEPTABLE / SLOPPY / DISASTER
๐Ÿ“ JSON Report Machine-readable for CI/CD

๐Ÿ” Pattern Examples

Critical Severity

# ๐Ÿšจ mutable_default_arg - AI's favorite mistake
def process_items(items=[]):  # Bug: shared state between calls
    items.append(1)
    return items

# โœ… Fix: Use None and initialize inside
def process_items(items=None):
    if items is None:
        items = []
    items.append(1)
    return items
# ๐Ÿšจ bare_except - Catches SystemExit, KeyboardInterrupt
try:
    risky_operation()
except:  # Bug: swallows Ctrl+C!
    pass

# โœ… Fix: Catch specific exceptions
try:
    risky_operation()
except ValueError as e:
    logger.error(f"Invalid value: {e}")

High Severity

# ๐Ÿšจ pass_placeholder - AI gave up
def validate_email(email):
    pass  # TODO: implement

# ๐Ÿšจ hedging_comment - AI uncertainty
x = calculate()  # should work hopefully

๐Ÿ’ฐ The Value

๐Ÿ” Catch AI mistakes before they hit production

Why This Matters

Problem Impact Sloppy Catches
Mutable defaults Shared state bugs โœ… Critical alert
Bare except Swallows Ctrl+C โœ… Critical alert
Placeholder functions Runtime failures โœ… High alert
Hallucinated imports ImportError in prod โœ… High alert
JavaScript patterns .push(), .length errors โœ… High alert
Unused imports Code bloat โœ… Medium alert
Dead code Maintenance burden โœ… Medium alert
Copy-paste code Maintenance nightmare โœ… Medium alert

Research Says

  • 40%+ of AI-generated code contains security vulnerabilities
  • 20% of AI package imports reference non-existent libraries
  • 66% of developers say AI code is "almost right" (the dangerous kind)

๐Ÿ› ๏ธ CLI Commands

sloppylint .                    # ๐Ÿ” Scan current directory
sloppylint src/ tests/          # ๐Ÿ“ Scan multiple directories
sloppylint --severity high      # โšก Only critical/high issues
sloppylint --lenient            # ๐ŸŽฏ Same as --severity high
sloppylint --strict             # ๐Ÿ”ฌ Report everything
sloppylint --ci                 # ๐Ÿšฆ Exit 1 if any issues
sloppylint --max-score 50       # ๐Ÿ“Š Exit 1 if score > 50
sloppylint --output report.json # ๐Ÿ“‹ Export JSON report
sloppylint --ignore "tests/*"   # ๐Ÿšซ Exclude patterns
sloppylint --disable magic_number # โญ๏ธ Skip specific checks
sloppylint --version            # ๐Ÿ“Œ Show version

โœ… Features

Feature Description Status
๐Ÿ” Hallucinated Imports Detect non-existent packages (40+ patterns) โœ… Done
๐ŸŽญ Hallucinated Methods Detect JS patterns like .push(), .length โœ… Done
๐Ÿ“ฆ Unused Imports AST-based detection โœ… Done
๐Ÿ’€ Dead Code Unused functions/classes โœ… Done
๐Ÿ”„ Duplicate Detection Cross-file copy-paste โœ… Done
๐ŸŽจ Rich Output Colors and tables (optional) โœ… Done
โš™๏ธ Config Support pyproject.toml configuration โœ… Done

๐Ÿ“ฆ Installation

# Install from PyPI
pip install sloppylint

# With colored output (recommended)
pip install sloppylint[rich]

# With all optional features
pip install sloppylint[all]

# Or install from source for development
git clone https://github.com/rsionnach/sloppy.git
cd sloppy
pip install -e ".[dev]"

โš™๏ธ Configuration

Configure via pyproject.toml:

[tool.sloppy]
ignore = ["tests/*", "migrations/*"]
disable = ["magic_number", "debug_print"]
severity = "medium"
max-score = 100
ci = false
format = "detailed"  # or "compact" or "json"

๐Ÿค Contributing

git clone https://github.com/rsionnach/sloppy.git
cd sloppy
pip install -e ".[dev]"
pytest tests/ -v  # 57 tests should pass

See AGENTS.md for coding conventions and pattern implementation guide.


๐Ÿ“„ License

MIT


๐Ÿ™ Acknowledgments

Inspiration

  • KarpeSlop - The original AI Slop Linter for TypeScript
  • Andrej Karpathy's commentary on AI-generated code quality

Research

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sloppylint-0.1.1.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sloppylint-0.1.1-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file sloppylint-0.1.1.tar.gz.

File metadata

  • Download URL: sloppylint-0.1.1.tar.gz
  • Upload date:
  • Size: 38.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sloppylint-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c05065a299e50bef01d6882a927a749b55e7ec248181983f4468818a3fa612a7
MD5 6f9c4cae83b02d54d1090e098807f516
BLAKE2b-256 865cd5e07f646250e2d4aeffa3c43342b7c0320eb2c2e2210992368d67f1c64e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sloppylint-0.1.1.tar.gz:

Publisher: publish.yml on rsionnach/sloppy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sloppylint-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: sloppylint-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sloppylint-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 51fe7d334d52e29bde6b78bbacd493038d99b46bd960df38e7b40a9a4623e43a
MD5 feb6875d91f9769b6224668af17ea2c4
BLAKE2b-256 3d4d9c955dde6be400636ddbcdb19b43d0b5f1f290b59db71f34ee2dd3d222d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sloppylint-0.1.1-py3-none-any.whl:

Publisher: publish.yml on rsionnach/sloppy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page