Coding Standards
Before reviewing, read
copilot-instructions.md/AGENTS.md/CLAUDE.mdto identify the project's language, framework, and version. Adapt stack-specific rules accordingly.
Typed Language Rules (apply only when project uses the language)
TypeScript
- Strict mode required — never disable
strict: true - No
anywithout comment explaining why unavoidable - No
@ts-ignorewithout comment - Use
unknown+ narrowing instead ofanywhen type genuinely unknown interfacefor object shapes;typefor unions, intersections, utilities- All exported functions: explicit return type annotations
Python
- Type hints required on all function signatures (
def fn(x: int) -> str:) - No
# type: ignorewithout explanatory comment - Use
T | None(Python 3.10+) orOptional[T]— no implicitNonereturns - Use
dataclassesorpydanticfor structured data shapes
Go
- All errors must be checked — never discard with
_unless intentional + commented - Exported identifiers must have doc comments
- No
interface{}/anywithout justification - Prefer table-driven tests; use
errors.Is/errors.Asfor error checking
Naming Conventions
| Thing | Convention | Example |
|---|---|---|
| UI components / classes | PascalCase | UserCard, NoteEditor |
| Utility / helper files | kebab-case | sync-messages.ts, format-date.py |
| Variables and functions | camelCase | activeUser, loadData() |
| Module-level constants | UPPER_SNAKE_CASE | MAX_RETRIES |
| Type / interface names | PascalCase | UserSchema, ApiResponse |
| Route / endpoint files | Follow framework convention | +page.server.ts, router.py |
File Organisation
- Group by feature/domain, not by type
- One exported component per file
- Target under 400 lines per file; split larger files by concern
- Before creating a new file, check if logic fits in an existing module
Error Handling
- Never empty
catchblocks — re-throw, log, or return structured error - Server errors: log with context server-side; return safe message to client (no stack traces, no internal paths)
- API routes: return appropriate HTTP status codes with structured error body
- Validate all user input at system boundaries before use
Security (non-negotiable)
- No hardcoded secrets, credentials, or API keys — use environment variables
- Parameterized queries only — never interpolate user input into SQL/queries
- Sanitize user-controlled HTML before rendering (DOMPurify or equivalent)
- Never return stack traces or internal paths to the client
Import Ordering
Groups separated by a blank line:
- External packages / standard library
- Framework internals
- Internal path aliases
- Relative imports
Code Quality
- Functions under 50 lines, single responsibility
- No dead code, unused imports, or commented-out blocks in commits
- No logic repeated at 3+ call sites without extraction into a named helper
- Comment the why, not the what
What Never to Do
- No syntax from the wrong framework version — check project conventions
- No untyped code where the language supports type annotations
- No hardcoded environment-specific values
- No deprecated APIs without a migration comment
Source: AshenDulsanka/leaflet — distributed by TomeVault.