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/sloppylint.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/sloppylint.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.2.tar.gz (39.8 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.2-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sloppylint-0.1.2.tar.gz
  • Upload date:
  • Size: 39.8 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.2.tar.gz
Algorithm Hash digest
SHA256 945d0d1ed0c99662c491a985ad0163498d389e8a094eeec8d651524fc7aa97ee
MD5 174b6880ec540bac4acea160544a31aa
BLAKE2b-256 257fd8c33053426abcf7513be4d1173becf2143a16831f19f1bee1b1874bb07d

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on rsionnach/sloppylint

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.2-py3-none-any.whl.

File metadata

  • Download URL: sloppylint-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 36.4 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fb040442c976645222b63251aa959cd576c5c929e38a1f85059d9aee67e1e8ba
MD5 6da6045a633b8be454a3a29a714689b1
BLAKE2b-256 6359d2a668b5dc0540b6a406509e45e007bfc59a9b8a3f91b8597af7e5a60b0f

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on rsionnach/sloppylint

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