codoc 0.1.0

Unified documentation parser for Ruby and TypeScript codebases
Documentation
# codoc

A unified documentation parser for Ruby and TypeScript codebases. Extracts documentation comments (Yardoc for Ruby, JSDoc/TypeDoc for TypeScript) and outputs a common JSON format.

## Features

- Parse Ruby files with Yardoc-style comments
- Parse TypeScript files with JSDoc/TypeDoc-style comments
- Unified JSON output format for cross-language documentation
- Extract classes, modules, interfaces, methods, properties, and more
- Support for type parameters, generics, and complex type references
- Symbol table generation for cross-referencing

## Installation

```bash
cargo install codoc
```

Or build from source:

```bash
git clone https://github.com/sudoremo/codoc
cd codoc
cargo build --release
```

## Usage

### Parse a Ruby project

```bash
codoc parse ./src -l ruby -n "MyProject" -o docs.json
```

### Parse a TypeScript project

```bash
codoc parse ./src -l typescript -n "MyProject" -o docs.json
```

### Options

```
Usage: codoc parse [OPTIONS] -l <LANGUAGE> <PATH>

Arguments:
  <PATH>  Source directory or file to parse

Options:
  -o, --output <OUTPUT>      Output file path (defaults to stdout)
  -l, --language <LANGUAGE>  Source language [possible values: ruby, typescript]
  -n, --name <NAME>          Project name [default: project]
      --version <VERSION>    Project version
      --id-prefix <PREFIX>   ID prefix for all entities
      --pretty               Pretty-print JSON output [default: true]
  -h, --help                 Print help
```

## Output Format

The parser outputs JSON conforming to the codoc schema. See `doc/SCHEMA.md` for the full specification.

Example output structure:

```json
{
  "schema": "codoc/v1",
  "metadata": {
    "name": "MyProject",
    "language": "ruby",
    "generatedAt": "2025-01-01T00:00:00Z",
    "files": ["lib/my_class.rb"]
  },
  "entities": [
    {
      "kind": "class",
      "id": "MyClass",
      "name": "MyClass",
      "docs": {
        "summary": "A sample class."
      },
      "methods": [...]
    }
  ],
  "symbols": [...]
}
```

## Supported Documentation Tags

### Ruby (Yardoc)

- `@param` - Parameter documentation
- `@option` - Hash option documentation
- `@return` - Return value documentation
- `@raise` - Exception documentation
- `@yield`, `@yieldparam`, `@yieldreturn` - Block documentation
- `@example` - Code examples
- `@see` - Cross-references
- `@note` - Important notes
- `@todo` - TODO items
- `@deprecated` - Deprecation notices
- `@since` - Version information
- `@author` - Author attribution

### TypeScript (JSDoc/TypeDoc)

- `@param` - Parameter documentation
- `@returns` / `@return` - Return value documentation
- `@throws` / `@throw` - Exception documentation
- `@example` - Code examples
- `@see` - Cross-references
- `@todo` - TODO items
- `@deprecated` - Deprecation notices
- `@since` / `@version` - Version information
- `@template` - Type parameter documentation
- `@private` / `@internal` - Visibility markers

## Library Usage

You can also use codoc as a library:

```rust
use codoc::parser::ruby::RubyParser;
use codoc::parser::{Parser, ParserConfig, ParseContext};
use codoc::schema::Language;

let mut parser = RubyParser::new()?;
let config = ParserConfig::new("MyProject", Language::Ruby);
let mut ctx = ParseContext::new(config);

let entities = parser.parse_file(&path, &content)?;
ctx.entities.extend(entities);

let document = ctx.into_document();
```

## License

MIT