Skip to main content

ShitLint 💩🔍

Your code is shit. Here's why.

ShitLint is the AI code reviewer that cuts through the fluff and calls out the architectural dumpster fires hiding in your codebase. Because sometimes, brutal honesty is what is needed, even when it hurts.

Why ShitLint Exists

Ever wonder why your "simple feature" took 3 weeks to implement? It's because your code is a tangled mess of:

  • Copy-pasted functions everywhere (DRY? Never heard of it)
  • 200+ line files of spaghetti bullshit
  • Abstractions that abstract nothing
  • Imports that look like some shat on your keyboard

Traditional linters catch typos. ShitLint catches architectural bullshit.

What ShitLint Actually Does

$ shitlint .
⏺ FLAGGED BULLSHIT:

🚨 DRY VIOLATION:
- user_service.py:45-67 and admin_service.py:12-34 are literally the same function
- Did you copy-paste this? Be honest.

🚨 GIANT FILE ALERT:
- database.py:847 lines - This isn't a file, it's a novel
- Split this monstrosity before it gains sentience

🚨 BULLSHIT ABSTRACTION:
- utils.py:23 - A function called "doStuff" that does 47 different things
- Name your functions like a human, not a caffeinated squirrel

🚨 IMPORT CEREMONY:
- 23 imports for a 15-line file
- This isn't dependency injection, it's dependency addiction

VERDICT: Your code looks like it was written during a earthquake

Installation

pip install shitlint
# or just clone this repo and suffer with the rest of us

Usage

# Scan current directory
shitlint .

# Scan specific file
shitlint path/to/your/disaster.py

# Extra brutal mode (not recommended for sensitive developers)
shitlint --brutality brutal ./src

# Professional roasting (default)
shitlint --brutality professional ./src

# Gentle nudging (for beginners)
shitlint --brutality gentle ./src

Configuration

Create a .shitlint/config.json file to customize how brutally honest you want the feedback:

{
  "brutality": "brutal",
  "ignore_patterns": ["tests/", "*.generated.py"],
  "max_file_size": 100000,
  "llm_provider": "auto"
}

Or use the init command:

shitlint --init

Language Support

  • Python ✅ (your FastAPI spaghetti)
  • JavaScript ⏳ (your React component soup - coming soon)
  • TypeScript ⏳ (your over-engineered type gymnastics - coming soon)
  • Go ⏳ (your "simple" microservice that imports 47 packages - coming soon)
  • More languages coming (unfortunately)

FAQ

Q: Is this just a joke? A: No. Your code genuinely needs help.

Q: Why so aggressive? A: Because your linter has been lying to you. Someone has to tell the truth.

Q: Can I disable the roasting? A: You can, but then you're just running a regular linter. Where's the fun in that?

Q: Will this hurt my feelings? A: Probably. But your code will be better for it.

Contributing

Found a new way code can be terrible? We'd love to hear about it.

  1. Fork this repo
  2. Add your horror stories to the detection engine
  3. Submit a PR
  4. Watch other developers suffer

Roadmap

  • JavaScript/TypeScript support (so you can be roasted in more languages)
  • Integration with popular IDEs (so you can be roasted in real-time)
  • Team dashboard (shame your colleagues publicly)
  • AI-generated refactoring suggestions (because apparently you need help)
  • Slack integration (get roasted in meetings)
  • Custom personality modes (Gordon Ramsay, Disappointed Parent, etc.)

License

MIT - Because even terrible code deserves freedom


Remember: The first step to writing better code is admitting your current code is shit.

Built with ❤️ and a concerning amount of coffee by @iteebz


Star this repo if you're brave enough to face the truth about your 💩 code

Release files for shitlint 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shitlint 0.1.0
File Size Uploaded
shitlint-0.1.0.tar.gz 26.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for shitlint 0.1.0
File Interpreter ABI Platform
shitlint-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 61.1 kB

Release files / shitlint-0.1.0.tar.gz

Download URL shitlint-0.1.0.tar.gz
Size 26.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a67eaef3d0f6196dea44ee670b8527b2c5080a041148c587d75a58a7d0c52a2f
BLAKE2b-256 checksum
How to use checksums
c5274e0ce97151c726cf5439ad683ef1b0e58d64891c4695d8c14c99a5d7282a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.12.10 Darwin/24.5.0

Release files / shitlint-0.1.0-py3-none-any.whl

Download URL shitlint-0.1.0-py3-none-any.whl
Size 35.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d9469291c3364331be6e7b0c9b23ac81fb4a565d23eff4223f52dfcfc0def79e
BLAKE2b-256 checksum
How to use checksums
d48741d2e773330c78f340d4fae3751f4a0043ad18651febf6f23245fff5d9c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.12.10 Darwin/24.5.0

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page