# Tipo: CodeEntity

Fuente conceptual: OpenViking `openviking/parse/parsers/code/ast/` (AGPL-3.0)
Reimplementar desde cero. No copiar codigo.

## Tipo a implementar

### CodeEntity (product)

- **Dominio:** core
- **Lang:** Python
- **Algebraic:** product
- **Definicion:**
  ```python
  @dataclass
  class CodeEntity:
      kind: str                   # "function" | "class" | "method" | "interface" | "type" | "struct" | "trait"
      name: str                   # nombre de la entidad
      start_line: int             # linea de inicio (1-based)
      end_line: int               # linea de fin (1-based)
      signature: str              # firma completa (hasta el body)
      docstring: str | None       # docstring/comment extraido
      language: str               # "python" | "go" | "typescript" | "rust" | "java" | "cpp"
      children: list["CodeEntity"] = field(default_factory=list)  # metodos dentro de clases
  ```
- **Metodos:**
  - `line_count -> int` (property) — `end_line - start_line + 1`
  - `has_docstring -> bool` (property)
  - `to_dict() -> dict` — serializacion recursiva
  - `from_dict(data: dict) -> CodeEntity` — deserializacion (classmethod)
- **Descripcion:** Entidad de codigo extraida por analisis AST (tree-sitter). Representa una funcion, clase, metodo, tipo, interfaz, struct o trait encontrado en codigo fuente. Las clases contienen sus metodos como children.
- **Uso:** Resultado de `parse_code_ast()`. Util para:
  - Indexar codigo en un registry
  - Generar skeletons/resumen de archivos de codigo
  - Extraer funciones candidatas de repos externos
  - Navegacion de codigo (jump to definition)
- **Notas:**
  - `signature` incluye decoradores/annotations en Python, generic params en TypeScript/Go, visibility modifiers en Java/Rust
  - `docstring` es el primer string literal hijo en Python, el comentario `///` o `/** */` previo en otros lenguajes
  - `children` solo se usa para metodos dentro de clases/structs/traits/interfaces
