home / skills / dexploarer / claudius-skills / comment-generator

This skill automatically generates clear code comments and docstrings to improve readability and maintainability across languages.

npx playbooks add skill dexploarer/claudius-skills --skill comment-generator

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
5.2 KB
---
name: comment-generator
description: Generate code comments and docstrings. Use when user asks to "add comments", "document this code", "explain with comments", or "add docstrings".
allowed-tools: [Read, Edit]
---

# Comment Generator Skill

Automatically generates clear, helpful comments for code.

## When to Use

This skill activates when the user wants to add comments to their code:
- "Add comments to this function"
- "Document this code"
- "Add docstrings to my Python class"
- "Explain this with inline comments"

## Instructions

### Step 1: Identify Language

Determine the programming language from:
- File extension
- Syntax patterns
- User specification

### Step 2: Choose Comment Style

**JavaScript/TypeScript:**
```javascript
/**
 * Calculates the sum of two numbers
 * @param {number} a - First number
 * @param {number} b - Second number
 * @returns {number} The sum
 */
function add(a, b) {
  return a + b;
}
```

**Python:**
```python
def add(a, b):
    """
    Calculates the sum of two numbers.

    Args:
        a (int): First number
        b (int): Second number

    Returns:
        int: The sum of a and b
    """
    return a + b
```

**Java:**
```java
/**
 * Calculates the sum of two numbers
 * @param a First number
 * @param b Second number
 * @return The sum
 */
public int add(int a, int b) {
    return a + b;
}
```

### Step 3: Comment Structure

For functions/methods:
1. **Summary**: What it does (one line)
2. **Parameters**: Each parameter explained
3. **Returns**: What it returns
4. **Throws/Raises**: Any exceptions (if applicable)
5. **Examples**: Usage example (if complex)

For classes:
1. **Summary**: What the class represents
2. **Attributes**: Key properties
3. **Usage**: How to instantiate and use

For complex logic:
1. **Inline comments**: Explain why, not what
2. **Section comments**: Mark major sections
3. **TODO/FIXME**: Note improvements needed

### Step 4: Write Clear Comments

✅ **Good comments:**
- Explain WHY, not just WHAT
- Use clear, simple language
- Are concise but complete
- Add value (don't state the obvious)

❌ **Bad comments:**
```javascript
// Add a and b
function add(a, b) {
  return a + b;  // Return the sum
}
```

✅ **Better:**
```javascript
/**
 * Combines two monetary values, useful for calculating totals
 * Handles floating point precision for currency
 */
function add(a, b) {
  return Math.round((a + b) * 100) / 100;  // Round to 2 decimals
}
```

## Examples

### Example 1: Simple Function

**Input:**
```javascript
function calculateTotal(items) {
  return items.reduce((sum, item) => sum + item.price, 0);
}
```

**Output:**
```javascript
/**
 * Calculates the total price of all items in a collection
 * @param {Array<{price: number}>} items - Array of items with price property
 * @returns {number} Total price of all items
 * @example
 * const total = calculateTotal([{price: 10}, {price: 20}]); // Returns 30
 */
function calculateTotal(items) {
  return items.reduce((sum, item) => sum + item.price, 0);
}
```

### Example 2: Complex Function

**Input:**
```python
def process_data(data, filters=None):
    if not filters:
        filters = []
    result = []
    for item in data:
        valid = True
        for f in filters:
            if not f(item):
                valid = False
                break
        if valid:
            result.append(item)
    return result
```

**Output:**
```python
def process_data(data, filters=None):
    """
    Filters a dataset using multiple filter functions.

    Applies each filter function to every item in the dataset.
    Only items that pass all filters are included in the result.

    Args:
        data (list): Collection of items to filter
        filters (list of callable, optional): Filter functions that return True/False.
                                             Defaults to empty list (no filtering).

    Returns:
        list: Filtered dataset containing only items that passed all filters

    Example:
        >>> data = [1, 2, 3, 4, 5]
        >>> is_even = lambda x: x % 2 == 0
        >>> is_positive = lambda x: x > 0
        >>> process_data(data, [is_even, is_positive])
        [2, 4]
    """
    if not filters:
        filters = []

    result = []

    for item in data:
        valid = True

        # Apply each filter - item must pass all filters
        for f in filters:
            if not f(item):
                valid = False
                break  # Skip remaining filters if one fails

        if valid:
            result.append(item)

    return result
```

## Tips

### For Beginners
- Start with function/method summaries
- Add parameter descriptions
- Include simple examples

### For Intermediate
- Add type information
- Document exceptions
- Include edge cases

### For Advanced
- Add algorithmic complexity
- Document thread safety
- Include performance notes

## What NOT to Comment

❌ Don't comment obvious code:
```javascript
// Increment i
i++;
```

❌ Don't duplicate code in comments:
```javascript
// Set name to "John"
name = "John";
```

❌ Don't leave outdated comments:
```javascript
// TODO: Fix this next week
// (Written 2 years ago)
```

## Remember

- Comments should add value
- Update comments when code changes
- Explain complex logic
- Document public APIs thoroughly
- Keep private code comments minimal but helpful

Overview

This skill generates clear, pragmatic code comments and docstrings for functions, classes, and complex logic. It focuses on adding value by explaining intent, parameters, returns, exceptions, and usage examples rather than restating obvious code. Use it to produce language-appropriate comment blocks for TypeScript, JavaScript, Python, Java, and similar languages. It emphasizes concise, maintainable documentation that developers will keep up to date.

How this skill works

The skill detects the programming language from file extension, syntax patterns, or user input, then chooses the appropriate comment style (JSDoc/TSDoc, Python docstrings, Java-style Javadoc, etc.). It generates summaries, parameter and return descriptions, exception notes, and optional examples, and inserts inline comments to explain nontrivial decisions. For complex code it adds section comments and TODO/FIXME markers where improvements or edge-case handling are needed.

When to use it

  • When you want to add docstrings or JSDoc/TSDoc to functions or classes
  • When you ask to "add comments", "document this code", or "explain with comments"
  • When preparing public APIs, libraries, or modules for other developers
  • When refactoring complex logic and you want inline rationale comments
  • When writing examples or usage snippets for README or docs

Best practices

  • Explain why, not just what — focus comments on intent and trade-offs
  • Prefer concise one-line summaries plus short parameter/return descriptions
  • Use language-appropriate formats (JSDoc/TSDoc, Python triple-quote docstrings, Javadoc)
  • Avoid commenting obvious code and keep comments updated when code changes
  • Add examples for public APIs and note exceptions and edge cases

Example use cases

  • Add JSDoc to a TypeScript function to improve editor autocomplete and type hints
  • Insert Python docstrings for a class with attributes and usage examples
  • Annotate complex algorithms with inline comments explaining the rationale and complexity
  • Document public methods with parameter, return, and throws information for API consumers
  • Convert terse code into readable, maintainable code by adding section comments and TODO notes

FAQ

Will this overwrite existing comments?

It can update or extend existing comments on request; by default it preserves existing documentation and only adds or fills missing sections.

Can it generate examples and types?

Yes. It can create short usage examples and include type annotations compatible with the target language or JSDoc/TSDoc type syntax.