This is a visual studio code extension to help fixes bad coding habits by roasting your code into shape, a self-aware linter that teaches cleaner, more expressive code through sarcasm, wit, and a touch of emotional damage (the motivational kind). It's like "write cleaner code or get flamed trying"
Download the .vsix build.
In VS Code:
Ctrl+Shift+P → Extensions: Install from VSIX...
Choose the .vsix file you downloaded.
Enjoy.
--Total roasts bar counter.
--35 Roast rules.
--Tip with every roast to actually code better.
--The most common issues are within the extension.
--Variety in rules (Performance, Safety, Syntax and etc.).
--3 Different Modes (gentle, annoying, savage).
Below are small taste-test examples of the kinds of roasts Assist Roast Linter will throw at you.
Each rule also includes a practical tip so it’s not just emotional damage for nothing.
Example:
Usingvar? Ah yes, coding like it’s 2005 again.
Tip: Useletorconstbefore your descendants hunt you down.
Covers things like:
varusageconsole.logspam==instead of===anyin TypeScript- Magic numbers
- Empty
catchblocks - Super long lines
- Redundant boolean compares like
flag === true
Example:
fs.readFileSyncin a server? Bold move. Enjoy your single-threaded traffic jam.
Tip: Use async FS APIs (fs.promises.*or callbacks) to avoid blocking the event loop.
Covers things like:
- Synchronous
fs.*Synccalls in hot paths JSON.parseinside loopsconsole.login tight loopssetIntervalwithout clearing- Nested
setTimeoutchaos - Massive callbacks in
map/forEach/filter/reduce
Example:
Usingeval? You really said “execute this string and we’ll see what happens”.
Tip: Avoideval/new Function, use safer structured logic or mappings instead.
Covers things like:
evalnew Function(...)- Direct
.innerHTML = ... dangerouslySetInnerHTMLin React- Shell commands via
child_process.exec - Weak hashes like
md5/sha1 - Storing
token/jwtinlocalStorage
Example:
'data' again? Revolutionary. No one’s ever thought of that. **Tip:** Use names that explain the *intent*, likeuserProfile,errorCount,orderTotal`.
Targets vague names like:
foo,bar,baz,data,info,obj,tmpx,y,z,t,a,b,cas “permanent” variable namesres,str,num,test, etc. with no context
Example:
Floating promise detected. Just letting it vibe in the ether, huh??
Tip: Eitherawaitthe promise, return it, or handle its errors explicitly.
Covers things like:
- Promise chains not awaited or returned
async functionwith zeroawaitinside (async in vibes only)
Example:
This nesting is so deep you’ll need a rope and a map to get back out..
Tip: Use early returns, helper functions, or guard clauses to flatten control flow.
Covers:
- Deeply nested
if/for/while/switch/tryblocks - Functions with way too many parameters
- Huge function-like blocks that should be split into smaller units
Example:
Commented-out code museum exhibit right here..
Tip: If it’s important, version control remembers it. If not, delete it.
Covers:
- Large blocks of commented-out code
// debug/# debugnoise left behind in comments
Example:
// TODO:Ah yes, another promise to future-you that will never be fulfilled.
Tip: Turn important TODOs into actual issues or tasks so they don’t rot in comments.
Catches:
TODOandFIXMEnotes that you keep stacking up like emotional debt
Example:
print()everywhere? Production logs via vibes only.
Tip: Use Python’sloggingmodule for real apps and keep stray prints out of main code paths.
Also includes:
- Lone
passblocks left as “I’ll do it later” placeholders
Example:
// @ts-ignore— you didn’t fix the error, you just blindfolded the compiler.
Tip: Use ignores sparingly and document why, or fix the underlying type issue.
Covers:
// @ts-ignoreabuse// eslint-disableeverywhere instead of fixing code or tuning config
Example:
Exported function with no docs? This public API is just raw-dogging the outside world..
Tip: Add a short JSDoc to explain what the function does and how to use it.
Catches exported functions with zero documentation, nudging you to add descriptions.