# 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
```bash
$ 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
```bash
pip install shitlint
# or just clone this repo and suffer with the rest of us
```
## Usage
```bash
# 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:
```json
{
"brutality": "brutal",
"ignore_patterns": ["tests/", "*.generated.py"],
"max_file_size": 100000,
"llm_provider": "auto"
}
```
Or use the init command:
```bash
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](https://github.com/iteebz)*
---
⭐ **Star this repo if you're brave enough to face the truth about your 💩 code**
Raw data
{
"_id": null,
"home_page": "https://github.com/iteebz/shitlint",
"name": "shitlint",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": null,
"keywords": "shitlint, shit, lint, your, code, is, bad, and, you, should, feel, bad, brutal, honest, roast",
"author": "Tyson Chan",
"author_email": "tyson.chan@proton.me",
"download_url": "https://files.pythonhosted.org/packages/c5/27/4e0ce97151c726cf5439ad683ef1b0e58d64891c4695d8c14c99a5d7282a/shitlint-0.1.0.tar.gz",
"platform": null,
"description": "# ShitLint \ud83d\udca9\ud83d\udd0d\n\n**Your code is shit. Here's why.**\n\nShitLint 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.\n\n## Why ShitLint Exists\n\nEver wonder why your \"simple feature\" took 3 weeks to implement? It's because your code is a tangled mess of:\n- Copy-pasted functions everywhere (DRY? Never heard of it)\n- 200+ line files of spaghetti bullshit\n- Abstractions that abstract nothing\n- Imports that look like some shat on your keyboard\n\nTraditional linters catch typos. ShitLint catches **architectural bullshit**.\n\n## What ShitLint Actually Does\n\n```bash\n$ shitlint .\n```\n\n```\n\u23fa FLAGGED BULLSHIT:\n\n\ud83d\udea8 DRY VIOLATION:\n- user_service.py:45-67 and admin_service.py:12-34 are literally the same function\n- Did you copy-paste this? Be honest.\n\n\ud83d\udea8 GIANT FILE ALERT:\n- database.py:847 lines - This isn't a file, it's a novel\n- Split this monstrosity before it gains sentience\n\n\ud83d\udea8 BULLSHIT ABSTRACTION:\n- utils.py:23 - A function called \"doStuff\" that does 47 different things\n- Name your functions like a human, not a caffeinated squirrel\n\n\ud83d\udea8 IMPORT CEREMONY:\n- 23 imports for a 15-line file\n- This isn't dependency injection, it's dependency addiction\n\nVERDICT: Your code looks like it was written during a earthquake\n```\n\n## Installation\n\n```bash\npip install shitlint\n# or just clone this repo and suffer with the rest of us\n```\n\n## Usage\n\n```bash\n# Scan current directory\nshitlint .\n\n# Scan specific file\nshitlint path/to/your/disaster.py\n\n# Extra brutal mode (not recommended for sensitive developers)\nshitlint --brutality brutal ./src\n\n# Professional roasting (default)\nshitlint --brutality professional ./src\n\n# Gentle nudging (for beginners)\nshitlint --brutality gentle ./src\n```\n\n## Configuration\n\nCreate a `.shitlint/config.json` file to customize how brutally honest you want the feedback:\n\n```json\n{\n \"brutality\": \"brutal\",\n \"ignore_patterns\": [\"tests/\", \"*.generated.py\"],\n \"max_file_size\": 100000,\n \"llm_provider\": \"auto\"\n}\n```\n\nOr use the init command:\n```bash\nshitlint --init\n```\n\n## Language Support\n\n- Python \u2705 (your FastAPI spaghetti)\n- JavaScript \u23f3 (your React component soup - coming soon)\n- TypeScript \u23f3 (your over-engineered type gymnastics - coming soon)\n- Go \u23f3 (your \"simple\" microservice that imports 47 packages - coming soon)\n- More languages coming (unfortunately)\n\n## FAQ\n\n**Q: Is this just a joke?**\nA: No. Your code genuinely needs help.\n\n**Q: Why so aggressive?**\nA: Because your linter has been lying to you. Someone has to tell the truth.\n\n**Q: Can I disable the roasting?**\nA: You can, but then you're just running a regular linter. Where's the fun in that?\n\n**Q: Will this hurt my feelings?**\nA: Probably. But your code will be better for it.\n\n## Contributing\n\nFound a new way code can be terrible? We'd love to hear about it.\n\n1. Fork this repo\n2. Add your horror stories to the detection engine\n3. Submit a PR\n4. Watch other developers suffer\n\n## Roadmap\n\n- [ ] JavaScript/TypeScript support (so you can be roasted in more languages)\n- [ ] Integration with popular IDEs (so you can be roasted in real-time)\n- [ ] Team dashboard (shame your colleagues publicly)\n- [ ] AI-generated refactoring suggestions (because apparently you need help)\n- [ ] Slack integration (get roasted in meetings)\n- [ ] Custom personality modes (Gordon Ramsay, Disappointed Parent, etc.)\n\n## License\n\nMIT - Because even terrible code deserves freedom\n\n---\n\n**Remember: The first step to writing better code is admitting your current code is shit.**\n\n*Built with \u2764\ufe0f and a concerning amount of coffee by [@iteebz](https://github.com/iteebz)*\n\n---\n\n\u2b50 **Star this repo if you're brave enough to face the truth about your \ud83d\udca9 code**\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Your code is shit. Here's why.",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/iteebz/shitlint",
"Repository": "https://github.com/iteebz/shitlint"
},
"split_keywords": [
"shitlint",
" shit",
" lint",
" your",
" code",
" is",
" bad",
" and",
" you",
" should",
" feel",
" bad",
" brutal",
" honest",
" roast"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d48741d2e773330c78f340d4fae3751f4a0043ad18651febf6f23245fff5d9c5",
"md5": "21cc82b0f4b2e01fe0f7b4eb96c5f123",
"sha256": "d9469291c3364331be6e7b0c9b23ac81fb4a565d23eff4223f52dfcfc0def79e"
},
"downloads": -1,
"filename": "shitlint-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "21cc82b0f4b2e01fe0f7b4eb96c5f123",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.10",
"size": 34982,
"upload_time": "2025-07-18T11:24:24",
"upload_time_iso_8601": "2025-07-18T11:24:24.102978Z",
"url": "https://files.pythonhosted.org/packages/d4/87/41d2e773330c78f340d4fae3751f4a0043ad18651febf6f23245fff5d9c5/shitlint-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c5274e0ce97151c726cf5439ad683ef1b0e58d64891c4695d8c14c99a5d7282a",
"md5": "8a6d742209f02d09c8a31e807aa62edb",
"sha256": "a67eaef3d0f6196dea44ee670b8527b2c5080a041148c587d75a58a7d0c52a2f"
},
"downloads": -1,
"filename": "shitlint-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "8a6d742209f02d09c8a31e807aa62edb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 26097,
"upload_time": "2025-07-18T11:24:26",
"upload_time_iso_8601": "2025-07-18T11:24:26.958418Z",
"url": "https://files.pythonhosted.org/packages/c5/27/4e0ce97151c726cf5439ad683ef1b0e58d64891c4695d8c14c99a5d7282a/shitlint-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-18 11:24:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "iteebz",
"github_project": "shitlint",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "shitlint"
}