Rules
All 152 rules. 43 are errors and fail the run; the remaining 109 are warnings and only report.
Every rule ships a snippet it must flag and one it must ignore, executed on every commit. Open any rule to see both.
Use the search box above to find a rule by what it catches.
Clean-code
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-077deceptive-function-name | Lying function name detected: implies a non-mutating action but contains side-effect… | error | AST |
VBC-079debugger-statements | debugger; statement found | error | Regex |
VBC-080browser-alert | Avoid using alert() | error | Regex |
VBC-008sleep-race-condition | Using setTimeout as a sleep to paper over a race condition | warning | Regex |
VBC-009jquery-modern-project | jQuery dependency detected | warning | Regex |
VBC-012redundant-promise-constructor | Redundant Promise constructor wrapping | warning | Regex |
VBC-015magic-numbers | Magic number detected | warning | Regex |
VBC-016commented-out-code | Potential commented-out code detected | warning | Regex |
VBC-018console-logs-detected | Production code with console usage found | warning | Regex |
VBC-026empty-file | Empty code file detected | warning | AST |
VBC-042too-many-comments | Too many consecutive comment lines | warning | Regex |
VBC-048meaningless-variable-names | Meaningless variable name detected | warning | Regex |
VBC-049magic-boolean | Magic boolean passed as first argument | warning | Regex |
VBC-051mixed-casing | snake_case and camelCase mixed | warning | Regex |
VBC-052single-letter-variables | Single-letter variable name detected | warning | Regex |
VBC-053redundant-interpolation | Redundant string interpolation detected | warning | Regex |
VBC-054unnecessary-else | Unnecessary 'else' after 'return' | warning | Regex |
VBC-056stale-todo | Debt marker that admits it is temporary | warning | Regex |
VBC-058overly-long-variable-name | Overly long variable name (>35 chars) detected | warning | Regex |
VBC-063empty-else | Empty else block detected | warning | Regex |
VBC-063-Bempty-block | Empty block detected | warning | AST |
VBC-065hadouken-nested-logic | Nested logic is levels deep, over the limit of | warning | AST |
VBC-066redundant-if-true | Redundant 'if(true)' detected | warning | AST |
VBC-068overuse-ternary | Chained or nested ternary | warning | Regex |
VBC-084long-line-limit | Line is too long ( characters) | warning | Regex |
VBC-096complex-regex-no-comment | Long regular expression literal with no explanation | warning | Regex |
VBC-098z-index-war | Extremely high z-index value detected (z-index wars) | warning | Regex |
VBC-102multi-statement-one-liner | Multiple statements on a single line detected | warning | AST |
VBC-104inconsistent-import | Mixing 'require' and 'import' in the same file | warning | Regex |
VBC-201redundant-async | async function with no await | warning | AST |
VBC-215global-pollutant | Assignment to a window property | warning | Regex |
VBC-501boolean-naming-vibes | Boolean variable has no standard prefix | warning | Semantic |
VBC-502redundant-boolean-logic | Redundant boolean return detected | warning | Semantic |
VBC-503collection-naming-vibes | Array named is missing a plural 's' or a collection suffix (List, Array) | warning | Semantic |
VBC-504semantic-shadowing | Variable shadows a common library or system keyword | warning | Semantic |
VBC-904magic-string | Magic string literal passed to function | warning | Regex |
VBC-905debug-console-usage | Debug console method left in code | warning | Regex |
VBC-906fixme-technical-debt | FIXME describing a live defect | warning | Regex |
VBC-907anonymous-todo | Unattributed debt marker | warning | Regex |
VBC-908long-inline-style | Overly long inline style attribute | warning | Regex |
VBC-909empty-interface-ts | Empty interface detected | warning | AST |
VBC-910console-table-leaks | console.table() left in code | warning | Regex |
VBC-911meaningless-helper-names | Generic class name detected | warning | Regex |
VBC-943ignored-catch-variable | Catch clause with ignored error variable | warning | Regex |
VBC-945ai-generated-placeholder-comment | AI-generated placeholder comment | warning | Regex |
Core
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-001hardcoded-secret | Hardcoded credential | error | Regex |
VBC-002committed-env | Environment file (.env) detected in staged files | error | Git |
VBC-003chmod-777 | Insecure chmod 777 detected | error | Regex |
VBC-005use-var | Use of 'var' detected | error | Regex |
VBC-013empty-catch | Empty catch block detected | error | AST |
VBC-017fake-test-assertion | Trivially true test assertion | error | Regex |
VBC-019absolute-paths | Hardcoded absolute path detected | error | Regex |
VBC-039use-eval | Use of 'eval()' detected | error | Regex |
VBC-070use-innerhtml | Use of 'innerHTML' detected | error | Regex |
VBC-086target-blank-rel | target='_blank' without rel='noopener' detected | error | Regex |
VBC-800floating-promise | Unawaited Promise detected | error | Type checker |
VBC-028function-params-limit | Function takes parameters, over the limit of | warning | AST |
VBC-032css-important | Global '!important' detected in CSS | warning | Regex |
VBC-057use-any | Avoid using 'any' type | warning | Regex |
VBC-059file-length-limit | File is too long ( lines) | warning | AST |
VBC-090passive-aggressive-comments | Passive-aggressive or helpless comment detected | warning | Regex |
VBC-150production-todo | Tracked debt marker still in the code | warning | Regex |
Correctness
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-006-Bmerge-conflict-markers | Merge conflict marker | error | Regex |
VBC-017-Bfocused-test-committed | Focused test | error | Regex |
VBC-946no-verification-after-operation | Destructive async operation with no verification of success | warning | Regex |
Docs
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-928lorem-ipsum-docs | Placeholder text 'Lorem ipsum' detected | error | Regex |
VBC-103ascii-art-block | Block of decoration: three or more comment lines that are shape and nothing else | warning | Regex |
VBC-324condescending-language | Condescending or vague language detected | warning | Regex |
VBC-334ai-generated-fluff | Potential AI-generated fluff or overused cliché detected | warning | Regex |
VBC-338non-inclusive-terminology | Non-inclusive terminology | warning | Regex |
VBC-340gendered-address | Gendered language detected | warning | Regex |
VBC-344non-iso-date | Non-ISO 8601 date found | warning | Regex |
VBC-347passive-voice | Potential passive voice | warning | Regex |
VBC-348click-here-links | Vague link text found | warning | Regex |
VBC-385success-message-grammar | Improper success message grammar | warning | Regex |
VBC-398panic-punctuation | Excessive punctuation | warning | Regex |
VBC-401broken-links | Broken link detected | warning | Heuristic |
VBC-414please-in-cli | Avoid using 'Please' in technical instructions | warning | Regex |
VBC-421filler-words | Filler word detected | warning | Regex |
VBC-917shouting-documentation | Sustained all-caps text | warning | Regex |
VBC-918we-detected-tone | Avoid first-person collective ('We') in system messages | warning | Regex |
VBC-920relative-link-format | Relative local link missing './' prefix | warning | Regex |
VBC-921hardcoded-outdated-year | Copyright notice ends at a year that has passed: | warning | Heuristic |
VBC-927vague-button-label | Vague button label detected | warning | Regex |
VBC-929technical-jargon-slop | Avoid buzzword-heavy jargon | warning | Regex |
VBC-933coming-soon-docs | Placeholder documentation content | warning | Regex |
VBC-934personal-opinion-docs | Personal opinion language in documentation | warning | Regex |
VBC-935colloquial-language | Corporate colloquialism or buzzword in documentation | warning | Regex |
VBC-936outdated-experimental-tag | Experimental or alpha status tag | warning | Regex |
VBC-948em-dash-prose | Em dash | warning | Regex |
Git
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-006committed-node-modules | node_modules directory detected in staged files | error | Git |
VBC-025missing-gitignore | Missing.gitignore file | error | Git |
VBC-106spaces-in-filenames | Filename contains spaces | error | Git |
VBC-924missing-readme-root | No README file found in project root | error | Git |
VBC-014committed-ide-settings | IDE settings file detected in staged files | warning | Git |
VBC-045missing-license | Missing LICENSE file | warning | Git |
VBC-046binary-files-in-git | Binary file committed to Git | warning | Git |
VBC-922too-many-staged-files | Staging files (limit:) | warning | Git |
VBC-923filename-too-long-hazard | Filename length exceeds characters | warning | Git |
VBC-925large-file-staged | File is over 1MB ( bytes) | warning | Git |
VBC-926short-commit-message-check | Commit message is likely too short | warning | Git |
VBC-930missing-contributing | Missing CONTRIBUTING.md file | warning | Git |
VBC-931missing-security-policy | Missing SECURITY.md file | warning | Git |
VBC-932missing-changelog | Missing CHANGELOG.md (or HISTORY.md) file | warning | Git |
Security
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-004sql-injection-concatenation | SQL built by string concatenation | error | Regex |
VBC-007float-for-currency | Monetary value declared as a floating point literal | error | Regex |
VBC-034http-not-https | Insecure http:// link detected | error | Regex |
VBC-902document-write-slop | document.write() is prohibited | error | Regex |
VBC-903eval-like-timers | Passing strings to timers is eval-like and insecure | error | Regex |
VBC-937client-side-auth-check | Authentication token or role stored/read from browser storage | error | Regex |
VBC-938command-injection-risk | Potential command injection | error | Regex |
VBC-939unrestricted-file-upload | File upload handler may lack type/size restrictions | error | Regex |
VBC-940float-currency-arithmetic | Floating-point arithmetic on monetary value | error | Regex |
VBC-944xss-href-injection | Dynamic href constructed with string interpolation | error | Regex |
VBC-947prototype-pollution-risk | Merging untrusted request body directly | error | Regex |
VBC-949committed-private-key | A private key is committed here | error | Git |
VBC-950window-open-without-noopener | window.open() without 'noopener' | error | Regex |
VBC-011document-cookie-direct | Direct document.cookie write | warning | Regex |
VBC-901hardcoded-ip-v4 | Hardcoded IP address | warning | Regex |
VBC-941missing-input-sanitization | Unsanitized HTML sink | warning | Regex |
VBC-942missing-access-control | Route handler may be missing authentication middleware | warning | Regex |
Ux-dx
| Rule | Catches | Severity | Analysis |
|---|---|---|---|
VBC-010div-onclick-non-semantic | Clickable <div> with onclick handler | error | Regex |
VBC-023notification-permission-eager | Notification.requestPermission() detected | error | Regex |
VBC-024autoplay-video-unmuted | Autoplay video without the muted attribute | error | Regex |
VBC-033placeholder-image-src | Placeholder image service URL detected | error | Regex |
VBC-035aria-label-icon-button | Icon-only button without aria-label | error | Regex |
VBC-101img-missing-alt | Image missing 'alt' attribute | error | Regex |
VBC-113disable-zoom | Disabling pinch-to-zoom is an accessibility violation | error | Regex |
VBC-117block-paste | Blocking paste in input fields harms both UX and security (password managers) | error | Regex |
VBC-913outline-none-hazard | Focus outline removed with nothing replacing it | error | Regex |
VBC-020justify-text-web | text-align:justify detected | warning | Regex |
VBC-021thin-font-weight | Thin font weight (100-199) detected | warning | Regex |
VBC-022custom-cursor-css | Custom cursor via CSS url() | warning | Regex |
VBC-027parallax-overuse | Parallax scrolling effect detected | warning | Regex |
VBC-029glassmorphism-overuse | backdrop-filter:blur() (glassmorphism) | warning | Regex |
VBC-030confetti-overuse | Confetti or particle animation library detected | warning | Regex |
VBC-097br-tags-for-layout | Multiple <br> tags used for layout | warning | Regex |
VBC-112scroll-hijacking | Potential scroll hijacking or forced smooth scrolling detected | warning | Regex |
VBC-123placeholder-as-label | Using placeholder as the only label is bad for accessibility | warning | Regex |
VBC-131video-background | Autoplay video backgrounds can be distracting and impact performance | warning | Regex |
VBC-153sudo-setup | Setup instructions requiring sudo detected | warning | Regex |
VBC-158fouc-prevention | Use of @import in CSS can cause Flash of Unstyled Content (FOUC) | warning | Regex |
VBC-161oversized-sticky-header | Oversized sticky header (>30vh) detected | warning | Regex |
VBC-172hamburger-on-desktop | Hamburger menu detected on desktop resolutions | warning | Regex |
VBC-197hardcoded-node-version | Hardcoded system version check detected | warning | Regex |
VBC-206pure-black-background | Pure black backgrounds (#000000) can cause eye strain | warning | Regex |
VBC-208hardcoded-colors | Hardcoded color value detected | warning | Regex |
VBC-212keyboard-focus-awareness | Suppressing focus outline without providing an alternative | warning | Regex |
VBC-305hardcoded-font-size | Hardcoded font size detected | warning | Regex |
VBC-914cursor-pointer-on-text | cursor: pointer applied to potentially non-interactive element | warning | Regex |
VBC-915user-select-none-slop | user-select: none detected | warning | Regex |
VBC-916vague-link-text-ux | Vague link text detected | warning | Regex |