Skip to content
Back to skills

Configure Docs

ASecurity

Check and configure code documentation standards and generators (TSDoc, JSDoc, pydoc, rustdoc)

  • 58 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
developmentjavascripttypescriptpythonrustgojavabashgitapici/cd

Works with

  • cli
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned February 12, 2026

npx -y skills add laurigates/claude-plugins --skill configure-docs --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Configure Docs?

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

Security grade badge for Configure Docs
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/laurigates-configure-docs/badge)](https://www.skillsdirectory.com/skills/laurigates-configure-docs)

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
---
model: haiku
created: 2025-12-16
modified: 2026-02-05
reviewed: 2025-12-16
description: Check and configure code documentation standards and generators (TSDoc, JSDoc, pydoc, rustdoc)
allowed-tools: Glob, Grep, Read, Write, Edit, Bash, AskUserQuestion, TodoWrite
argument-hint: "[--check-only] [--fix] [--level <minimal|standard|strict>] [--type <typescript|javascript|python|rust>] [--generator <typedoc|sphinx|mkdocs|rustdoc>]"
name: configure-docs
---

## Context

- Project root: !`pwd`
- Package files: !`find . -maxdepth 1 \( -name 'package.json' -o -name 'pyproject.toml' -o -name 'Cargo.toml' \) 2>/dev/null`
- Biome config: !`find . -maxdepth 1 -name 'biome.json' 2>/dev/null`
- TSDoc config: !`find . -maxdepth 1 \( -name 'tsdoc.json' -o -name 'typedoc.json' \) 2>/dev/null`
- Python config: !`find . -maxdepth 1 \( -name 'pyproject.toml' -o -name 'ruff.toml' -o -name '.ruff.toml' \) 2>/dev/null`
- Rust config: !`find . -maxdepth 1 \( -name 'Cargo.toml' -o -name 'clippy.toml' \) 2>/dev/null`
- Pre-commit: !`find . -maxdepth 1 -name '.pre-commit-config.yaml' 2>/dev/null`
- Doc generators: !`find . -maxdepth 1 \( -name 'mkdocs.yml' -o -name 'docusaurus.config.*' \) 2>/dev/null`
- Docs directory: !`find . -maxdepth 1 -type d -name 'docs' 2>/dev/null`

## Parameters

Parse from command arguments:

- `--check-only`: Report compliance status without modifications (CI/CD mode)
- `--fix`: Apply fixes automatically without prompting
- `--level <minimal|standard|strict>`: Documentation enforcement level (default: standard)
- `--type <typescript|javascript|python|rust>`: Override language detection
- `--generator <typedoc|sphinx|mkdocs|rustdoc>`: Override documentation generator detection

**Enforcement Levels:**
- `minimal`: Syntax validation only (valid doc comments)
- `standard`: Public API documentation required (recommended)
- `strict`: All items documented, including private

**Generator Auto-Detection:**
| Project Type | Default Generator |
|--------------|-------------------|
| TypeScript/JavaScript | TypeDoc |
| Python | MkDocs (simpler) or Sphinx |
| Rust | rustdoc |
| Multi-language/Other | MkDocs |

## Your Task

Configure documentation standards for the detected project language(s), including linter rules and compliance tests.

### Phase 1: Language Detection

Detect project language(s) from file structure:

| Indicator | Language |
|-----------|----------|
| `package.json` + `tsconfig.json` | TypeScript |
| `package.json` (no tsconfig) | JavaScript |
| `pyproject.toml` or `*.py` files | Python |
| `Cargo.toml` | Rust |

**Multi-language projects:** Configure each detected language. Allow `--type` override to focus on one.

### Phase 2: Current State Analysis

For each detected language, check existing documentation configuration:

**TypeScript/JavaScript:**
- [ ] `tsdoc.json` exists (TypeScript)
- [ ] Biome configured with organize imports
- [ ] TypeDoc or API Extractor configured for documentation generation

**Python:**
- [ ] `pyproject.toml` has `[tool.ruff.lint.pydocstyle]` section
- [ ] Convention specified (google, numpy, pep257)
- [ ] D rules enabled in ruff lint select

**Rust:**
- [ ] `Cargo.toml` has `[lints.rust]` section
- [ ] `missing_docs` lint configured
- [ ] `[lints.rustdoc]` section for rustdoc-specific lints

### Phase 3: Compliance Report

Generate formatted compliance report:

```
Documentation Standards Compliance Report
=========================================
Project: [name]
Languages: [detected languages]
Enforcement Level: [minimal|standard|strict]

TypeScript/JavaScript:
  tsdoc.json              [✅ PASS | ❌ MISSING | ⏭️ N/A]
  TypeDoc configured      [✅ PASS | ❌ MISSING | ⚠️ OUTDATED]
  API docs generated      [✅ PASS | ❌ DISABLED]

Python:
  ruff pydocstyle        [✅ PASS | ❌ MISSING]
  convention             [✅ google | ⚠️ not set]
  D rules enabled        [✅ PASS | ❌ DISABLED]

Rust:
  missing_docs lint      [✅ PASS | ❌ DISABLED]
  rustdoc lints          [✅ PASS | ⚠️ PARTIAL]

Overall: [X issues found]
```

### Phase 4: Configuration (if --fix or user confirms)

#### TypeScript Configuration

**Create/update `tsdoc.json`:**
```json
{
  "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json"
}
```

**Install TypeDoc for API documentation:**
```bash
npm install --save-dev typedoc
# or
bun add --dev typedoc
```

**Configure `typedoc.json`:**
```json
{
  "$schema": "https://typedoc.org/schema.json",
  "entryPoints": ["./src"],
  "entryPointStrategy": "expand",
  "out": "docs/api",
  "name": "PROJECT_NAME",
  "includeVersion": true,
  "readme": "README.md"
}
```

#### Python Configuration

**Update `pyproject.toml`:**
```toml
[tool.ruff.lint]
select = [
    "E",    # pycodestyle errors
    "F",    # pyflakes
    "D",    # pydocstyle
]

[tool.ruff.lint.pydocstyle]
convention = "google"  # or "numpy" for scientific projects
```

**Level-specific configuration:**

| Level | Rules |
|-------|-------|
| minimal | `D1` (missing docstrings warning) |
| standard | `D` with convention, ignore D107 (init), D203 |
| strict | All D rules, no ignores |

#### Rust Configuration

**Update `Cargo.toml`:**
```toml
[lints.rust]
missing_docs = "warn"  # standard level
# missing_docs = "deny"  # strict level

[lints.rustdoc]
broken_intra_doc_links = "warn"
missing_crate_level_docs = "warn"
```

**For strict level, add clippy lint:**
```toml
[lints.clippy]
missing_docs_in_private_items = "warn"
```

### Phase 5: Test Configuration

Create tests to validate documentation compliance.

#### TypeScript/JavaScript Tests

**Add npm script to `package.json`:**
```json
{
  "scripts": {
    "docs:build": "typedoc",
    "docs:check": "typedoc --emit none"
  }
}
```

**Create test file `tests/docs.test.ts`:**
```typescript
import { execSync } from 'child_process';
import { describe, it, expect } from 'vitest';

describe('Documentation Compliance', () => {
  it('should generate API documentation without errors', () => {
    expect(() => {
      execSync('npm run docs:check', { stdio: 'pipe' });
    }).not.toThrow();
  });
});
```

#### Python Tests

**Add test file `tests/test_docs.py`:**
```python
"""Documentation compliance tests."""
import subprocess
import pytest


def test_pydocstyle_compliance():
    """Verify all modules have proper docstrings."""
    result = subprocess.run(
        ["ruff", "check", "--select", "D", "--output-format", "json", "src/"],
        capture_output=True,
        text=True,
    )
    assert result.returncode == 0, f"Documentation violations found:\n{result.stdout}"


def test_public_api_documented():
    """Verify public API has docstrings."""
    result = subprocess.run(
        ["ruff", "check", "--select", "D1", "src/"],
        capture_output=True,
        text=True,
    )
    assert result.returncode == 0, f"Missing public docstrings:\n{result.stdout}"
```

#### Rust Tests

**Add test in `tests/docs.rs`:**
```rust
//! Documentation compliance tests.

#[test]
fn verify_docs_compile() {
    // Run rustdoc in test mode to verify doc examples compile
    // This is automatically done by `cargo test --doc`
}
```

**Add CI check in `.github/workflows/docs.yml`:**
```yaml
name: Documentation Check
on: [push, pull_request]
jobs:
  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check documentation
        run: |
          cargo doc --no-deps
          cargo clippy -- -W missing_docs
```

### Phase 6: Pre-commit Integration

If `.pre-commit-config.yaml` exists, add documentation hooks:

```yaml
repos:
  # Python
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.8.2
    hooks:
      - id: ruff
        args: [--select, D, --fix]

  # Rust (if not already present)
  - repo: local
    hooks:
      - id: cargo-clippy-docs
        name: clippy docs
        entry: cargo clippy -- -W missing_docs
        language: system
        types: [rust]
        pass_filenames: false
```

### Phase 7: Standards Tracking

Update `.project-standards.yaml`:

```yaml
standards_version: "2025.1"
project_type: "[detected]"
last_configured: "[timestamp]"
components:
  docs: "2025.1"
  docs_level: "[minimal|standard|strict]"
  docs_languages: ["typescript", "python", "rust"]
```

### Phase 8: Documentation Generator Setup

Auto-detect and configure the appropriate static site generator for publishing documentation.

**Detection Logic:**
1. Check for existing generator configs (use existing if found)
2. If `--generator` provided, use specified generator
3. Otherwise, match to detected project type

#### TypeScript/JavaScript: TypeDoc

**Install TypeDoc:**
```bash
npm install --save-dev typedoc
# or
bun add --dev typedoc
```

**Create `typedoc.json`:**
```json
{
  "$schema": "https://typedoc.org/schema.json",
  "entryPoints": ["./src"],
  "entryPointStrategy": "expand",
  "out": "docs/api",
  "name": "PROJECT_NAME",
  "includeVersion": true,
  "readme": "README.md",
  "plugin": ["typedoc-plugin-markdown"]
}
```

#### Python: MkDocs (Default)

**Install MkDocs with Material theme:**
```bash
uv add --group docs mkdocs mkdocs-material mkdocstrings[python]
```

**Create `mkdocs.yml`:**
```yaml
site_name: PROJECT_NAME
site_description: Project description
repo_url: https://github.com/OWNER/REPO

theme:
  name: material
  features:
    - navigation.tabs
    - navigation.sections
    - search.suggest

plugins:
  - search
  - mkdocstrings:
      handlers:
        python:
          options:
            show_source: true
            show_root_heading: true

nav:
  - Home: index.md
  - API Reference: api/
```

#### Python: Sphinx (Alternative)

**Install Sphinx:**
```bash
uv add --group docs sphinx sphinx-rtd-theme sphinx-autodoc-typehints myst-parser
```

**Create `docs/conf.py`:**
```python
project = 'PROJECT_NAME'
extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.napoleon',
    'sphinx_autodoc_typehints',
    'myst_parser',
]
html_theme = 'sphinx_rtd_theme'
```

#### Rust: rustdoc

**Update `Cargo.toml`:**
```toml
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lints.rustdoc]
broken_intra_doc_links = "warn"
missing_crate_level_docs = "warn"
```

### Phase 9: Build Scripts

Add documentation build commands to the project.

#### TypeScript/JavaScript

**Add to `package.json`:**
```json
{
  "scripts": {
    "docs:build": "typedoc",
    "docs:serve": "npx serve docs"
  }
}
```

#### Python (MkDocs)

**Add to `pyproject.toml`:**
```toml
[project.scripts]
# Or use uv run directly:
# uv run mkdocs build
# uv run mkdocs serve
```

**Build command:** `mkdocs build` (outputs to `site/`)
**Serve command:** `mkdocs serve`

#### Python (Sphinx)

**Create `docs/Makefile`:**
```makefile
SPHINXBUILD = sphinx-build
SOURCEDIR = .
BUILDDIR = _build

html:
	$(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html
```

**Build command:** `make -C docs html` (outputs to `docs/_build/html/`)

#### Rust

**Build command:** `cargo doc --no-deps` (outputs to `target/doc/`)

### Phase 10: Updated Compliance Report

Add generator status to the compliance report:

```
Documentation Standards Compliance Report
=========================================
Project: [name]
Languages: [detected languages]
Enforcement Level: [minimal|standard|strict]

Linting Standards:
  TypeScript/JavaScript:
    tsdoc.json              [✅ PASS | ❌ MISSING | ⏭️ N/A]
    TypeDoc configured      [✅ PASS | ❌ MISSING | ⚠️ OUTDATED]
    API docs generated      [✅ PASS | ❌ DISABLED]

  Python:
    ruff pydocstyle        [✅ PASS | ❌ MISSING]
    convention             [✅ google | ⚠️ not set]
    D rules enabled        [✅ PASS | ❌ DISABLED]

  Rust:
    missing_docs lint      [✅ PASS | ❌ DISABLED]
    rustdoc lints          [✅ PASS | ⚠️ PARTIAL]

Documentation Generator:
  Generator type         [typedoc|mkdocs|sphinx|rustdoc]  [✅ DETECTED | ⚠️ SUGGESTED]
  Config file            [config path]                     [✅ EXISTS | ❌ MISSING]
  Build script           [command]                         [✅ EXISTS | ❌ MISSING]
  Output directory       [docs/|site/|target/doc/]         [✅ EXISTS | ⏭️ NOT BUILT]

Overall: [X issues found]

Next Steps:
  - Run `[build command]` to generate documentation locally
  - Run `/configure:github-pages` to set up deployment
```

## Output

Provide:
1. Compliance report with per-language status
2. List of changes made (if --fix) or proposed (if interactive)
3. Instructions for running documentation tests
4. Next steps for improving coverage

## See Also

- `/configure:github-pages` - Set up GitHub Pages deployment
- `/configure:all` - Run all compliance checks
- `/configure:status` - Quick compliance overview
- `/configure:pre-commit` - Pre-commit hook configuration
- **biome-tooling** skill for TypeScript/JavaScript
- **ruff-linting** skill for Python
- **rust-development** skill for Rust

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…