Wiki Generator with LSP
Usage
bash
python scripts/generate_docs.py /path/to/project --output WIKI.md
Workflow
- •Detect language from config files (
package.json,pyproject.toml,go.mod, etc.) - •Start LSP server for the detected language
- •Query LSP for symbols, references, types, and call hierarchy
- •Generate WIKI.md with Mermaid diagrams
LSP Servers
| Language | Server |
|---|---|
| TypeScript/JS | typescript-language-server |
| Python | pylsp |
| Go | gopls |
| Rust | rust-analyzer |
| C/C++ | clangd |
If LSP unavailable, scripts fall back to AST/regex analysis.
Output Sections
- •Project Overview (tech stack, dependencies)
- •Architecture (Mermaid flowchart)
- •Project Structure (directory tree)
- •Core Components (classes, functions, APIs)
- •Data Flow (Mermaid sequenceDiagram)
- •Data Model (Mermaid erDiagram, classDiagram)
- •API Reference
- •Configuration
- •Getting Started
- •Development Guide
See references/wiki-template.md for section templates.
Tips
Analysis:
- •Exclude:
node_modules/,venv/,.git/,dist/,build/ - •Prioritize entry points:
main.py,index.ts,App.tsx - •For large codebases, focus on
src/orlib/
Formatting:
- •Use Mermaid diagrams extensively (flowchart, sequenceDiagram, classDiagram, erDiagram)
- •Include code snippets where helpful
- •Use tables for structured information
- •Add navigation links between sections
- •Keep explanations clear and concise
Language Support Details
| Language | Config Files | Entry Points | LSP Server | Installation |
|---|---|---|---|---|
| TypeScript/JS | package.json, tsconfig.json | index.ts, main.ts, App.tsx | typescript-language-server | npm i -g typescript-language-server typescript |
| Python | pyproject.toml, setup.py, requirements.txt | main.py, app.py, __main__.py | pylsp | pip install python-lsp-server |
| Go | go.mod | main.go, cmd/*/main.go | gopls | go install golang.org/x/tools/gopls@latest |
| Rust | Cargo.toml | main.rs, lib.rs | rust-analyzer | rustup component add rust-analyzer |
| Java | pom.xml, build.gradle | Main.java, Application.java | jdtls | Eclipse JDT Language Server |
| C/C++ | CMakeLists.txt, Makefile | main.c, main.cpp | clangd | apt install clangd or brew install llvm |
Fallback Analysis
When LSP is unavailable, the scripts use fallback analyzers:
- •AST Parsing - For Python (
astmodule) and JavaScript (regex-based) - •Regex Patterns - For function/class detection in other languages
- •Import Analysis - Parse import statements for dependency graphs
Fallback provides ~70% of LSP accuracy but works without server setup.
Troubleshooting
LSP Server Not Found
code
Error: Could not start LSP server for TypeScript
Solution: Install the required LSP server globally. See Installation column in Language Support table.
Timeout During Analysis
code
Error: LSP request timed out
Solutions:
- •Increase timeout:
--timeout 120 - •Reduce scope:
--path src/instead of entire project - •Check if LSP server is overloaded (large codebase)
Empty or Incomplete Output
Possible causes:
- •Project has no recognizable entry points
- •LSP server crashed during analysis
- •File permissions prevent reading
Solutions:
- •Specify entry point:
--entry src/main.py - •Check LSP server logs
- •Run with
--verbosefor debug output
Mermaid Diagrams Not Rendering
Mermaid diagrams require a compatible viewer:
- •GitHub/GitLab markdown preview
- •VS Code with Mermaid extension
- •Mermaid Live Editor: https://mermaid.live
Performance Considerations
| Project Size | Files | Estimated Time | Memory |
|---|---|---|---|
| Small | < 50 | < 30s | ~100MB |
| Medium | 50-500 | 1-5 min | ~500MB |
| Large | 500-5000 | 5-30 min | 1-2GB |
| Very Large | > 5000 | Consider splitting | 2GB+ |
Tips for large codebases:
- •Analyze specific directories:
--path src/core - •Skip test files:
--exclude "**/test/**" - •Use incremental analysis if available
- •Consider generating separate docs per module
Known Limitations
- •Monorepos: May need per-package analysis
- •Dynamic imports: Not fully detected (Python
importlib, JSimport()) - •Metaprogramming: Dynamically generated code may be missed
- •Private symbols: Some LSP servers don't expose private members
- •Cross-language projects: Analyze each language separately
Best Practices
- •Run from project root - Ensures correct path resolution
- •Commit WIKI.md - Track documentation changes with code
- •Regenerate periodically - Keep docs in sync with codebase
- •Review output - AI-generated docs may need human refinement
- •Customize template - Adapt
wiki-template.mdto your needs