Claude Code Plugins

Community-maintained marketplace

Feedback

ts-morph-analyzer

@ratacat/claude-skills
10
0

Use when debugging TypeScript/JavaScript bugs by tracing call chains, understanding unfamiliar codebases quickly, making architectural decisions, or reviewing code quality. Extract function signatures and JSDoc without full file reads, trace call hierarchies up/down, detect code smells, and follow data flow. Triggers on debugging, understanding codebase, architectural analysis, signature extraction, call tracing.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name ts-morph-analyzer
description Use when debugging TypeScript/JavaScript bugs by tracing call chains, understanding unfamiliar codebases quickly, making architectural decisions, or reviewing code quality. Extract function signatures and JSDoc without full file reads, trace call hierarchies up/down, detect code smells, and follow data flow. Triggers on debugging, understanding codebase, architectural analysis, signature extraction, call tracing.

TypeScript Codebase Analyzer

Overview

Lightweight codebase analysis using ts-morph. Extract signatures, JSDoc, and call chains without flooding context with full file reads.

Core principle: Get maximum architectural insight with minimum token usage.

When to Use

Situation Script to Use
Understand a codebase's public API quickly extract-signatures.ts
Trace a bug through function calls trace-calls.ts
Map what a module exports analyze-exports.ts
Detect architectural issues before diving in code-smells.ts
Understand import/dependency structure analyze-exports.ts --deps

Setup

# In the skill directory
cd ~/.claude/skills/ts-morph-analyzer
npm install

Or run the setup script:

~/.claude/skills/ts-morph-analyzer/setup.sh

Quick Reference

Extract Signatures (Most Common)

Get function/method signatures + JSDoc without reading full files:

# All signatures in a file
npx ts-node scripts/extract-signatures.ts src/api/users.ts

# All signatures in a directory (recursive)
npx ts-node scripts/extract-signatures.ts src/

# Filter to exported only
npx ts-node scripts/extract-signatures.ts src/ --exported

# Include types and interfaces
npx ts-node scripts/extract-signatures.ts src/ --types

# Output as JSON for further processing
npx ts-node scripts/extract-signatures.ts src/ --json

Output example:

// src/api/users.ts

/**
 * Fetches user by ID from the database
 * @param id - User's unique identifier
 * @returns User object or null if not found
 */
export async function getUser(id: string): Promise<User | null>

/**
 * Creates a new user account
 * @throws ValidationError if email is invalid
 */
export async function createUser(data: CreateUserInput): Promise<User>

Trace Call Hierarchy

Follow function calls up (who calls this?) or down (what does this call?):

# Who calls this function?
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --up

# What does this function call?
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --down

# Full call chain (both directions, limited depth)
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --depth 3

# Output as tree
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --tree

Output example (--up):

getUser (src/api/users.ts:15)
├── called by: handleGetUser (src/routes/users.ts:23)
│   └── called by: router.get('/users/:id') (src/routes/users.ts:8)
├── called by: validateSession (src/middleware/auth.ts:45)
└── called by: getUserProfile (src/services/profile.ts:12)

Analyze Exports

Map a module's public API surface:

# What does this module export?
npx ts-node scripts/analyze-exports.ts src/api/

# Include re-exports
npx ts-node scripts/analyze-exports.ts src/ --follow-reexports

# Show dependency graph
npx ts-node scripts/analyze-exports.ts src/ --deps

Detect Code Smells

Quick architectural assessment:

# Full analysis
npx ts-node scripts/code-smells.ts src/

# Specific checks
npx ts-node scripts/code-smells.ts src/ --check circular-deps
npx ts-node scripts/code-smells.ts src/ --check large-functions
npx ts-node scripts/code-smells.ts src/ --check missing-jsdoc
npx ts-node scripts/code-smells.ts src/ --check many-params

Architectural Assessment Patterns

When analyzing a new codebase for potential issues:

1. Public API Surface First

# Get the big picture: what's exported?
npx ts-node scripts/extract-signatures.ts src/ --exported --json > api-surface.json

Look for: Overly complex interfaces, inconsistent naming, missing JSDoc on public APIs

2. Dependency Structure

# Map imports - circular deps are red flags
npx ts-node scripts/code-smells.ts src/ --check circular-deps

Look for: Circular dependencies, deep import chains, unclear module boundaries

3. Function Complexity

# Find complex functions that may need refactoring
npx ts-node scripts/code-smells.ts src/ --check large-functions --check many-params

Look for: Functions >50 lines, >5 parameters, deep nesting

4. Documentation Coverage

# Public APIs should be documented
npx ts-node scripts/code-smells.ts src/ --check missing-jsdoc --exported

Following the Data Trail

When debugging, trace data flow without reading full files:

Pattern: "Where does this value come from?"

# 1. Find who calls the function with the bad value
npx ts-node scripts/trace-calls.ts src/service.ts:processData --up --depth 5

# 2. Get signatures of callers to understand parameter flow
npx ts-node scripts/extract-signatures.ts src/caller.ts

Pattern: "Where does this return value go?"

# 1. Find what uses this function's return
npx ts-node scripts/trace-calls.ts src/api.ts:fetchUser --down

# 2. Check how return values are consumed
npx ts-node scripts/trace-calls.ts src/api.ts:fetchUser --down --show-usage

Pattern: "Full call chain for a bug"

# Get complete path from entry point to problem area
npx ts-node scripts/trace-calls.ts src/broken.ts:problematicFn --up --tree

Script Locations

All scripts in: ~/.claude/skills/ts-morph-analyzer/scripts/

Script Purpose
extract-signatures.ts Extract function/method/class signatures with JSDoc
trace-calls.ts Trace call hierarchies up/down
analyze-exports.ts Map module exports and dependencies
code-smells.ts Detect architectural issues

Common Issues

Problem Solution
"Cannot find module 'ts-morph'" Run npm install in skill directory
Slow on large codebases Add --include "src/**/*.ts" to limit scope
Missing type info Ensure tsconfig.json is in project root
Memory issues Use --exclude "node_modules" (default)