javascript-code-style
SKILL.md
JavaScript Code Style
Use following conventions for JavaScript and TypeScript code.
Preparations
- Add to dev dependencies in package.json if not added:
- eslint-config-metarhia
- eslint, prettier
- Add scripts in package.json if not added:
- "lint": "eslint . && prettier --check "/*.js" "/.json" "**/.md" "*/.ts""
- "fix": "eslint . --fix && prettier --write "/*.js" "/.json" "**/.md" "*/.ts""
- Before and after code analisys with AI run
npm run lintandnpm t - Use
npm run fixif errors/warnings detected to auto-fix when possible
Formatting
- Use single quotes and semicolons
- Keep max line length 80 (ignore URLs)
- Use trailing commas in multiline arrays, objects, and params
- Keep one empty line between semantic blocks
- Follow Prettier and eslint-config-metarhia for spacing, braces, and indentation
Naming
- Use
camelCasefor variables and parameters - Use
UpperCamelCasefor classes and types - Use
UPPER_SNAKE_CASEfor constants - Use
newwith capitalized constructor names - Use
errorin catch blocks, noterr - Use short names (
e,i) only in short one-line callbacks - Use descriptive names in multiline callbacks (
event,index,item) - Use boolean prefixes:
is,has,can,should - Use singular names for entities and plural names for collections
- Use verb names for functions and handlers (
parse,create,handle,on) - Include units in numeric names (
timeoutMs,sizeBytes)
Best practices
- Prefer
const, minimizelet, never usevar - Prefer arrow functions (except prototype/class methods)
- Do not mutate input parameters
- Keep functions small and single-purpose
- Decompose long expressions into intermediate variables
- Prefer explicit loops (
for,for..of) in hot paths - Use array methods when they improve readability
- Use
===and!==only - Keep return types consistent
- Avoid nested ternaries and deep callback nesting
- Self-documented and self-descriptive code: do not add obvious comments, code should be clear without comments
- Use iteration methods like
.map,.filter,.reduceif it is good for code semantic - Try to avoid
.forEachexcept case when passed callback do not read something from outer context
Optimizations
- Keep object shapes stable: same keys, types, and key order
- Change shape only in constructors and creational patterns; avoid mix-ins and
delete - Use shape mutations only for metaprogramming
- Use
nullfor empty reference types; useundefinedfor empty primitives - Avoid array destructuring in assignments and loops; object destructuring is ok
- Keep hot functions monomorphic: stable arg count, types, and return types
- Avoid reading the same property from many unrelated object shapes
- Prefer string or number literals for status/codes; avoid mixing primitives with objects in one variable
- Keep objects that share a property to the same shape; avoid polymorphic hotspots
- Prefer fixed property access (
obj.x) over dynamic keys (obj[key]) in hot paths - Keep arrays dense, avoid holes and mixed element kinds
- Initialize object fields in constructor/factory once and in one order
- Set field to
nullorundefinedinstead ofdeletein hot paths - Move reusable callbacks outside hot loops
- Keep
try/catch, spread/rest, andargumentsaway from hot loops - Use
Mapfor dynamic key dictionaries, plain objects for fixed schemas - Use
Object.create(null)for pure dictionaries - Use typed arrays for numeric and binary workloads
- Reduce GC pressure: reuse arrays, objects, and buffers when safe
Weekly Installs
5
Repository
metarhia/skillsGitHub Stars
3
First Seen
4 days ago
Security Audits
Installed on
opencode5
gemini-cli5
github-copilot5
codex5
kimi-cli5
amp5