Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing JavaScript or TypeScript identifiers: enforce PascalCase types, camelCase functions and variables, CONSTANT_CASE module constants and enum members, is/has boolean prefixes, and verb-first function names — the arbitrary casing per identifier kind that cheaper models apply inconsistently by default.
.claude/skills/javascript-naming-conventions/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 1 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +26% | +80% | 0% | 23 | 54d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-10 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
Every identifier in JS/TS code carries a fixed case determined by WHAT it names, not by taste. Apply these whenever you declare a class, type, function, variable, constant, enum, or boolean in JavaScript or TypeScript source.
UpperCamelCase (PascalCase). Classes, interfaces, type aliases, enumtype names, and React components: first character uppercase, no underscores, no hyphens. class BankAccount, interface UserProfile, type ClickHandler, enum LogLevel, function ProfileCard() (a component).
lowerCamelCase (camelCase). Functions, methods, localvariables, parameters, object properties, and instances: first character lowercase. function calculateTotal(), const activeUsers = [], deposit(amount), let retryCount.
CONSTANT_CASE. All uppercase letters,words separated by single underscores (a.k.a. SCREAMING_SNAKE_CASE). Reserve this for a value that is module/exported scope AND never changes AND whose nested contents are trusted never to change: const MAX_RETRY_COUNT = 5, const DEFAULT_TIMEOUT_MS = 30000.
CONSTANT_CASE — regardless of language. The enum type is PascalCase,its members all-uppercase: enum LogLevel { DEBUG, INFO, WARN, ERROR }.
is / has / can / should (alsodid / will). Applies to boolean variables, properties, and boolean-returning fields: isEnabled, hasChildren, canRetry, shouldFlush. A bare adjective/noun (enabled, children) reads as a value, not a flag.
fetchOrders,renderChart, validateInput, handleClick. A bare noun (order, input) names a value; a function that DOES something must lead with what it does. Boolean-returning predicates use is/has + noun or a verb like validate.
short forms are id, url, api, and a loop index i/j. Avoid calc, usr, btn, tmp, and lone letters otherwise.
const requestTimeout = 5000; → const REQUEST_TIMEOUT_MS = 5000;
enum Color { Red, Green, Blue } → enum Color { RED, GREEN, BLUE }
let loading = true; → let isLoading = true;
{ visible: false, admin: true } → { isVisible: false, isAdmin: true }
function invoice(cart) { ... } → function generateInvoice(cart) { ... }
class shopping_cart {} → class ShoppingCart {}
const CART_ITEMS = []; → const cartItems = [];
const is not the same as "constant." A const that binds a mutable object/array, orthat is function-local, is NOT CONSTANT_CASE — it stays camelCase (const session = openSession()). Reserve CONSTANT_CASE for deeply-immutable module-level values.
UserMenu); hooks are functions → camelCaseand start with use (useAuth).
internal casing — both httpClient and HTTPClient styles exist; just don't mix.
#field for true private fields; do not rely on a leading underscore.interface OrderLine — Don't interface orderLine or interface Order_Line.const MAX_UPLOAD_BYTES = 10_000_000 — Don't const maxUploadBytes = 10_000_000 for a fixed module constant.enum Direction { UP, DOWN } — Don't enum Direction { Up, Down } or { up, down }.const isExpired = ... — Don't const expired = ... for a boolean.function sendReport() — Don't function report() for an action.is/has/can/should prefix on boolean identifiers.calcTot, usrSvc) instead of full descriptive words.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +26 percentage points is the difference between those two pass rates over the 23 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/9/2026 | +42% |
Other measured skills in the registry, with their headline benchmark lift.