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.

Status: Alpha Python 3.9+ License: MIT


โšก Quick Start

# Install from GitHub
pip install git+https://github.com/rsionnach/sloppy.git

# Or clone and install locally
git clone https://github.com/rsionnach/sloppy.git
cd sloppy
pip install -e .

# Run it
sloppy .

# 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
sloppy src/

# Scan specific files
sloppy app.py utils.py

# Only high severity issues
sloppy --severity high

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

# Export JSON report
sloppy --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

sloppy .                    # ๐Ÿ” Scan current directory
sloppy src/ tests/          # ๐Ÿ“ Scan multiple directories
sloppy --severity high      # โšก Only critical/high issues
sloppy --lenient            # ๐ŸŽฏ Same as --severity high
sloppy --strict             # ๐Ÿ”ฌ Report everything
sloppy --ci                 # ๐Ÿšฆ Exit 1 if any issues
sloppy --max-score 50       # ๐Ÿ“Š Exit 1 if score > 50
sloppy --output report.json # ๐Ÿ“‹ Export JSON report
sloppy --ignore "tests/*"   # ๐Ÿšซ Exclude patterns
sloppy --disable magic_number # โญ๏ธ Skip specific checks
sloppy --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 GitHub
pip install git+https://github.com/rsionnach/sloppy.git

# With colored output (recommended)
pip install "sloppylint[rich] @ git+https://github.com/rsionnach/sloppy.git"

# With all optional features
pip install "sloppylint[all] @ git+https://github.com/rsionnach/sloppy.git"

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

# Verify
sloppy --version

โš™๏ธ 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.0.tar.gz (38.3 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.0-py3-none-any.whl (35.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sloppylint-0.1.0.tar.gz
  • Upload date:
  • Size: 38.3 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.0.tar.gz
Algorithm Hash digest
SHA256 7ade9ce251ce2484b58ee31ce95db5550a43869284e62de5226e1185b84abc20
MD5 882aca53700edd5c9db4f9d86e5b2918
BLAKE2b-256 1abeb3661dcc0d16bd32163c2ad6e36f162c0903868e9436d9a9dd8ed66cb3f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for sloppylint-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: sloppylint-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 35.2 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f00aed1d8b32bd74c92ef7bb15038016e509bdd3206bbeb85c8920c7fdd9b55d
MD5 873a014e1e885531d5f32d89045f08d9
BLAKE2b-256 8e8c3f68d96c02b23da2ddd0b1a69543d80032c15d6d7f3fde7c86b0c8ddb6c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for sloppylint-0.1.0-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