| name | repo-source-code-document |
| description | Document Formisch source code with JSDoc and inline comments. Use when writing or updating documentation comments in packages/core, packages/methods, or frameworks/* source files. |
| metadata | {"author":"formisch","version":"1.0"} |
Source Code Documentation
A concise guide for documenting Formisch source code with JSDoc and inline comments.
Core Principles
- Clarity over verbosity - Be precise and concise
- Consistency is critical - Same APIs use identical documentation across all frameworks
- User-focused - Documentation enhances TypeScript IntelliSense
- Group related code - Comment logical blocks, not every line
JSDoc Patterns
Interfaces and Types
First line format:
[Name] [category] interface. → "Form store interface."
[Name] [category] type. → "Validation mode type."
Special cases:
- Config: "Use field config interface."
- Store: "Form store interface."
- Props: "Field element props interface."
export interface FormStore<TSchema extends FormSchema> {
readonly isSubmitting: ReadonlySignal<boolean>;
readonly errors: ReadonlySignal<[string, ...string[]] | null>;
}
Property patterns:
- Boolean state:
Whether the [subject] [condition].
- Data properties:
The current [description].
- Path properties:
The path to the [description] within the form.
- Element props:
The [description] of the field element.
Functions
Overload signatures only (no JSDoc on implementation):
export function useField<TSchema, TFieldPath>(
form: FormStore<TSchema>,
config: UseFieldConfig<TSchema, TFieldPath>
): FieldStore<TSchema, TFieldPath>;
export function useField(form: FormStore, config: UseFieldConfig): FieldStore {
}
Rules:
- First line: Action-focused description (present tense, third person)
- Start with verbs: "Creates", "Initializes", "Resets", "Validates"
@param: The [description]. (start with "The", end with period)
@returns: The [description]. (describe what is returned)
- Add
// @__NO_SIDE_EFFECTS__ for pure functions only
Constants
export const INTERNAL = '~internal' as const;
Barrel Files
No JSDoc and inline comments needed - keep clean.
Inline Comments
Style Rules
- No articles ("the", "a", "an") except in Hints
- No periods at end except in Hints and TODOs
- Use present tense verbs
- Blank line before comment, none after
Section Headers
Mark major logic blocks:
const input = getFieldInput(internalFieldStore);
if (shouldValidate) {
}
Conditionals
if (isTouched) {
validate();
}
else if (validate === 'initial') {
performValidation();
}
else {
return;
}
Operations
Group related operations under one comment:
store.validators = 0;
store.validate = config.validate ?? 'submit';
store.revalidate = config.revalidate ?? 'input';
Hints
Explain WHY, not WHAT. Can use articles and periods:
const obj = { prop: value };
In JSDoc:
initialInput: Signal<unknown>;
Cross-Framework Consistency
Same properties/functions across frameworks must use identical documentation text.
Check documentation in other frameworks before adding or modifying.
What to Document
✅ Document
- Public interfaces and types
- Exported function overloads
- Exported constants
- Interface properties
- Section headers for major logic blocks
- Each branch in long if-else chains
- Non-obvious logic (with Hints)
❌ Don't Document
- Function implementations
- Barrel/index files
- Standard loop variables (
index, key, item)
- Every single line
- Obvious operations
@ts-expect-error when context is clear
Quick Reference
JSDoc First Lines
- Interface:
[Name] [category] interface.
- Type:
[Name] [category] type.
- Function: Descriptive action sentence
- Constant: Brief description
JSDoc Tags
@param name The [description].
@returns The [description].
@internal (for internal APIs only)
Inline Patterns
// Get [what]
// Set [what] to [value]
// If [condition], [action]
// Otherwise, [action]
// Hint: [explanation with articles and period]
// TODO: [task]