Skip to content
Back to skills

Documentation

ASecurity

Fixes documentation issues including missing JSDoc, module-level comments, and @returns tags. Use when functions lack documentation or JSDoc is incomplete.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 10, 2026
documentationtypescriptgobashnodeexpressapidatabasedocumentation

Works with

  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add mgd34msu/goodvibes-gemini --skill documentation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Documentation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Documentation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mgd34msu-documentation/badge)](https://www.skillsdirectory.com/skills/mgd34msu-documentation)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: documentation
description: Fixes documentation issues including missing JSDoc, module-level comments, and @returns tags. Use when functions lack documentation or JSDoc is incomplete.
---

# Documentation Fixes

Fixes for code documentation issues. Good documentation explains intent, edge cases, and non-obvious behavior - not what the code obviously does.

## Quick Start

1. Identify documentation gap type (missing JSDoc, missing @returns, missing module doc)
2. Read the function/module to understand its purpose
3. Write concise documentation focusing on the "why" and edge cases
4. Verify documentation adds value beyond what code already shows

## Priority

**P3 - Fix when convenient.** Documentation improves maintainability but doesn't affect runtime.

---

## Workflows

### Missing JSDoc on Exported Functions (#10 - 23 occurrences)

**Detection**: Exported function without JSDoc comment.

**Pattern**: Public API without documentation.

```typescript
// PROBLEM - no documentation
export function calculateDiscount(price: number, code: string): number {
  // ...
}
```

**Fix Strategy**: Add focused JSDoc explaining what isn't obvious.

```typescript
// SOLUTION - focused JSDoc
/**
 * Applies a discount code to calculate the final price.
 * @param price - Original price in cents
 * @param code - Discount code (case-insensitive)
 * @returns Final price after discount, minimum 0
 * @throws {InvalidCodeError} When code is expired or invalid
 */
export function calculateDiscount(price: number, code: string): number {
  // ...
}
```

**What to document**:
- Units (cents vs dollars, ms vs seconds)
- Edge cases (empty input, null handling)
- Error conditions (@throws)
- Non-obvious return values
- Side effects

**What NOT to document**:
- Obvious things the signature tells you
- Implementation details
- Things that will get outdated

---

### Missing Module-Level JSDoc (#12 - 55 occurrences - FIXED)

**Pattern**: File without top-level module documentation.

```typescript
// PROBLEM - no module doc
import { db } from './database';

export function createUser() { ... }
```

**Fix Strategy**: Add @module JSDoc at file top.

```typescript
// SOLUTION
/**
 * @module validators/order
 * @description Validation functions for order processing.
 * Handles input sanitization and business rule enforcement.
 */

import { db } from './database';

export function createUser() { ... }
```

**Module doc template**:

```typescript
/**
 * @module {feature}/{filename}
 * @description {One sentence describing the module's purpose}.
 * {Optional second sentence about key functionality or usage context}.
 */
```

---

### Missing @returns in JSDoc (#20 - 8 occurrences)

**Pattern**: JSDoc with @param but no @returns.

```typescript
// PROBLEM - missing @returns
/**
 * Calculates the total with tax.
 * @param subtotal - Amount before tax
 * @param taxRate - Tax rate as decimal (e.g., 0.08 for 8%)
 */
function calculateTotal(subtotal: number, taxRate: number): number {
  return subtotal * (1 + taxRate);
}
```

**Fix Strategy**: Add @returns when return value has non-obvious behavior.

```typescript
// SOLUTION - add @returns
/**
 * Calculates the total with tax.
 * @param subtotal - Amount before tax in cents
 * @param taxRate - Tax rate as decimal (e.g., 0.08 for 8%)
 * @returns Total amount in cents, rounded to nearest cent
 */
function calculateTotal(subtotal: number, taxRate: number): number {
  return Math.round(subtotal * (1 + taxRate));
}
```

**When @returns adds value**:
- Return value has specific units
- Rounding or transformation applied
- Null/undefined possible with specific meaning
- Complex object with important properties

---

## Scripts

### Check Documentation Coverage

```bash
node scripts/check-docs.js /path/to/src
```

### Generate JSDoc Stubs

```bash
node scripts/generate-jsdoc.js /path/to/file.ts
```

---

## JSDoc Templates

### Function Documentation

```typescript
/**
 * {Brief description of what the function does}.
 * @param {paramName} - {Description including units/constraints}
 * @returns {Description including units/edge cases}
 * @throws {ErrorType} {When this error is thrown}
 * @example
 * const result = functionName(arg1, arg2);
 */
```

### Class Documentation

```typescript
/**
 * {Brief description of the class purpose}.
 * @example
 * const instance = new ClassName(config);
 * instance.method();
 */
class ClassName {
  /**
   * Creates a new instance.
   * @param config - Configuration options
   */
  constructor(config: Config) {}
}
```

### Interface Documentation

```typescript
/**
 * Configuration options for {feature}.
 */
interface Config {
  /** Maximum number of retries (default: 3) */
  maxRetries?: number;

  /** Timeout in milliseconds (default: 5000) */
  timeoutMs?: number;

  /** Called when operation completes */
  onComplete?: (result: Result) => void;
}
```

### Type Alias Documentation

```typescript
/**
 * User identifier - either numeric ID or email string.
 * Numeric IDs are for internal users, emails for external.
 */
type UserId = number | string;
```

---

## Documentation Quality Guidelines

### Good Documentation

```typescript
/**
 * Retries a failed operation with exponential backoff.
 * @param operation - Async function to retry
 * @param maxAttempts - Maximum retry count (default: 3)
 * @returns Result of successful operation
 * @throws Last error if all attempts fail
 * @example
 * const data = await withRetry(() => fetchData(id), 5);
 */
```

Why it's good:
- Explains the "exponential backoff" behavior (not obvious from name)
- Documents default values
- Clarifies error behavior
- Provides usage example

### Bad Documentation

```typescript
/**
 * This function retries an operation.
 * @param operation - The operation to retry
 * @param maxAttempts - The max attempts
 * @returns The result
 */
```

Why it's bad:
- Just restates what's obvious from the signature
- Doesn't explain retry strategy
- Doesn't document defaults or error behavior

---

## ESLint Rules

### Require JSDoc

```typescript
// eslint.config.js
{
  rules: {
    'jsdoc/require-jsdoc': ['warn', {
      require: {
        FunctionDeclaration: true,
        MethodDefinition: true,
        ClassDeclaration: true,
      },
      contexts: [
        'ExportNamedDeclaration > FunctionDeclaration',
        'ExportNamedDeclaration > VariableDeclaration > VariableDeclarator > ArrowFunctionExpression',
      ],
    }],
    'jsdoc/require-param-description': 'warn',
    'jsdoc/require-returns-description': 'warn',
  },
}
```

---

## Documentation Maintenance

### Keeping Docs Updated

1. Review JSDoc when changing function signature
2. Update @throws when adding error conditions
3. Update @returns when changing return value
4. Consider removing docs that become misleading

### Automated Checks

- Use `eslint-plugin-jsdoc` for validation
- Run doc coverage in CI
- Generate API docs from JSDoc (TypeDoc)

### When to Skip Documentation

- Internal helper functions with obvious purpose
- Test files
- Type-only files (interfaces self-document)
- Generated code

Files in this skill

  • SKILL.md6.9 KB
  • references/api-doc-patterns.md9.5 KB
  • references/changelog-conventions.md6.9 KB
  • references/readme-templates.md10.8 KB
  • references/runbook-patterns.md12.1 KB
  • templates/adr-template.md2.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…