Compare commits

2 Commits

Author SHA1 Message Date
b1544c9610 chore: bump version to 0.0.2 after renaming loader/model packages to loaders/models
All checks were successful
continuous-integration/drone/tag Build is passing
2026-01-21 15:46:33 +05:30
4a876abc62 refactor: rename loader/model packages to loaders/models
- Rename docforge.loader → docforge.loaders and docforge.model → docforge.models
- Update all imports, type stubs, CLI, tests, and documentation references
- Align MkDocs navigation and docforge.nav.yml with new package structure
- Adjust module docstrings and comments for consistency with pluralized naming
2026-01-21 15:45:48 +05:30
40 changed files with 79 additions and 78 deletions

View File

@@ -56,7 +56,7 @@ doc-forge server mypackage
### Python API ### Python API
```python ```python
from docforge.loader import GriffeLoader from docforge.loaders import GriffeLoader
from docforge.renderers import MkDocsRenderer from docforge.renderers import MkDocsRenderer
from pathlib import Path from pathlib import Path
@@ -70,6 +70,7 @@ renderer.generate_sources(project, Path("docs"))
# Build final documentation # Build final documentation
from docforge.renderers.base import RendererConfig from docforge.renderers.base import RendererConfig
config = RendererConfig(Path("docs"), project) config = RendererConfig(Path("docs"), project)
renderer.build(config) renderer.build(config)
``` ```

View File

@@ -1,13 +1,13 @@
home: docforge/index.md home: docforge/index.md
groups: groups:
Loader: Loaders:
- docforge/loader/index.md - docforge/loaders/index.md
- docforge/loader/griffe_loader.md - docforge/loaders/griffe_loader.md
Model: Models:
- docforge/model/index.md - docforge/models/index.md
- docforge/model/module.md - docforge/models/module.md
- docforge/model/object.md - docforge/models/object.md
- docforge/model/project.md - docforge/models/project.md
Navigation: Navigation:
- docforge/nav/index.md - docforge/nav/index.md
- docforge/nav/spec.md - docforge/nav/spec.md

View File

@@ -4,7 +4,7 @@
`doc-forge` is a renderer-agnostic Python documentation compiler designed for `doc-forge` is a renderer-agnostic Python documentation compiler designed for
speed, flexibility, and beautiful output. It decouples the introspection of speed, flexibility, and beautiful output. It decouples the introspection of
your code from the rendering process, allowing you to generate documentation your code from the rendering process, allowing you to generate documentation
for various platforms (starting with MkDocs) from a single internal model. for various platforms (starting with MkDocs) from a single internal models.
## Installation ## Installation
@@ -45,16 +45,16 @@ pip install doc-forge
## Project Structure ## Project Structure
- `docforge.loader`: Introspects source code using static analysis (`griffe`). - `docforge.loaders`: Introspects source code using static analysis (`griffe`).
- `docforge.model`: The internal representation of your project, modules, and objects. - `docforge.models`: The internal representation of your project, modules, and objects.
- `docforge.renderers`: Converters that turn the model into physical files. - `docforge.renderers`: Converters that turn the models into physical files.
- `docforge.nav`: Managers for logical-to-physical path mapping and navigation. - `docforge.nav`: Managers for logical-to-physical path mapping and navigation.
""" """
from .loader import GriffeLoader, discover_module_paths from .loaders import GriffeLoader, discover_module_paths
from .renderers import MkDocsRenderer from .renderers import MkDocsRenderer
from .cli import main from .cli import main
from . import model from . import models
__all__ = [ __all__ = [
"GriffeLoader", "GriffeLoader",

View File

@@ -1,7 +1,7 @@
from .loader import GriffeLoader, discover_module_paths from .loaders import GriffeLoader, discover_module_paths
from .renderers import MkDocsRenderer from .renderers import MkDocsRenderer
from .cli import main from .cli import main
from . import model from . import models
__all__ = [ __all__ = [
"GriffeLoader", "GriffeLoader",

View File

@@ -8,7 +8,7 @@ from typing import Sequence, Optional
import click import click
from docforge.loader import GriffeLoader, discover_module_paths from docforge.loaders import GriffeLoader, discover_module_paths
from docforge.renderers.mkdocs import MkDocsRenderer from docforge.renderers.mkdocs import MkDocsRenderer
from docforge.cli.mkdocs import mkdocs_cmd from docforge.cli.mkdocs import mkdocs_cmd

View File

@@ -1,7 +1,7 @@
""" """
# Loader Layer # Loader Layer
The `docforge.loader` package is responsible for discovering Python source files The `docforge.loaders` package is responsible for discovering Python source files
and extracting their documentation using static analysis. and extracting their documentation using static analysis.
## Core Features ## Core Features

View File

@@ -1,6 +1,6 @@
""" """
This module provides the GriffeLoader, which uses the 'griffe' library to This module provides the GriffeLoader, which uses the 'griffe' library to
introspect Python source code and populate the doc-forge Project model. introspect Python source code and populate the doc-forge Project models.
""" """
import logging import logging
@@ -15,7 +15,7 @@ from griffe import (
AliasResolutionError, AliasResolutionError,
) )
from docforge.model import Module, Project, DocObject from docforge.models import Module, Project, DocObject
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -83,7 +83,7 @@ class GriffeLoader:
skip_import_errors: bool = None, skip_import_errors: bool = None,
) -> Project: ) -> Project:
""" """
Load multiple modules and combine them into a single Project model. Load multiple modules and combine them into a single Project models.
Args: Args:
module_paths: A list of dotted paths to the modules to load. module_paths: A list of dotted paths to the modules to load.
@@ -116,7 +116,7 @@ class GriffeLoader:
def load_module(self, path: str) -> Module: def load_module(self, path: str) -> Module:
""" """
Load a single module and convert its introspection data into the docforge model. Load a single module and convert its introspection data into the docforge models.
Args: Args:
path: The dotted path of the module to load. path: The dotted path of the module to load.

View File

@@ -1,7 +1,7 @@
from typing import List, Optional from typing import List, Optional
from pathlib import Path from pathlib import Path
from docforge.model import Module, Project from docforge.models import Module, Project
def discover_module_paths( def discover_module_paths(
@@ -12,7 +12,7 @@ def discover_module_paths(
class GriffeLoader: class GriffeLoader:
"""Griffe-based introspection loader. """Griffe-based introspection loaders.
This is the only supported introspection backend in doc-forge. This is the only supported introspection backend in doc-forge.
""" """

View File

@@ -1,7 +1,7 @@
""" """
# Model Layer # Model Layer
The `docforge.model` package provides the core data structures used to represent The `docforge.models` package provides the core data structures used to represent
Python source code in a documentation-focused hierarchy. Python source code in a documentation-focused hierarchy.
## Key Components ## Key Components

View File

@@ -1,12 +1,12 @@
""" """
This module defines the Module class, which represents a Python module or package This module defines the Module class, which represents a Python module or package
in the doc-forge documentation model. It acts as a container for top-level in the doc-forge documentation models. It acts as a container for top-level
documented objects. documented objects.
""" """
from typing import Dict, Iterable, Optional from typing import Dict, Iterable, Optional
from docforge.model.object import DocObject from docforge.models.object import DocObject
class Module: class Module:

View File

@@ -1,6 +1,6 @@
from typing import Dict, Iterable, Optional from typing import Dict, Iterable, Optional
from docforge.model.object import DocObject from docforge.models.object import DocObject
class Module: class Module:

View File

@@ -1,6 +1,6 @@
""" """
This module defines the DocObject class, the fundamental recursive unit of the This module defines the DocObject class, the fundamental recursive unit of the
doc-forge documentation model. A DocObject represents a single Python entity doc-forge documentation models. A DocObject represents a single Python entity
(class, function, method, or attribute) and its nested members. (class, function, method, or attribute) and its nested members.
""" """

View File

@@ -5,7 +5,7 @@ project. It aggregates multiple Module instances into a single named entity.
from typing import Dict, Iterable from typing import Dict, Iterable
from docforge.model.module import Module from docforge.models.module import Module
class Project: class Project:

View File

@@ -1,6 +1,6 @@
from typing import Dict, Iterable from typing import Dict, Iterable
from docforge.model.module import Module from docforge.models.module import Module
class Project: class Project:

View File

@@ -2,7 +2,7 @@
# Renderers Layer # Renderers Layer
The `docforge.renderers` package handles the transformation of the internal The `docforge.renderers` package handles the transformation of the internal
documentation model into physical files formatted for specific documentation documentation models into physical files formatted for specific documentation
engines. engines.
## Current Implementations ## Current Implementations

View File

@@ -7,7 +7,7 @@ DocRenderer protocol.
from pathlib import Path from pathlib import Path
from typing import Protocol from typing import Protocol
from docforge.model import Project from docforge.models import Project
class RendererConfig: class RendererConfig:
@@ -16,7 +16,7 @@ class RendererConfig:
Args: Args:
out_dir: The directory where documentation files should be written. out_dir: The directory where documentation files should be written.
project: The introspected project model to be rendered. project: The introspected project models to be rendered.
""" """
def __init__(self, out_dir: Path, project: Project) -> None: def __init__(self, out_dir: Path, project: Project) -> None:
@@ -40,7 +40,7 @@ class DocRenderer(Protocol):
Generate renderer-specific source files for the given project. Generate renderer-specific source files for the given project.
Args: Args:
project: The project model containing modules and objects. project: The project models containing modules and objects.
out_dir: Target directory for the generated files. out_dir: Target directory for the generated files.
""" """
... ...

View File

@@ -1,7 +1,7 @@
from pathlib import Path from pathlib import Path
from typing import Protocol from typing import Protocol
from docforge.model import Project from docforge.models import Project
class RendererConfig: class RendererConfig:

View File

@@ -5,7 +5,7 @@ compatible with the MkDocs 'material' theme and 'mkdocstrings' extension.
from pathlib import Path from pathlib import Path
from docforge.model import Project from docforge.models import Project
class MkDocsRenderer: class MkDocsRenderer:
@@ -19,10 +19,10 @@ class MkDocsRenderer:
def generate_sources(self, project: Project, out_dir: Path) -> None: def generate_sources(self, project: Project, out_dir: Path) -> None:
""" """
Produce a set of Markdown files in the output directory based on the Produce a set of Markdown files in the output directory based on the
provided Project model. provided Project models.
Args: Args:
project: The project model to render. project: The project models to render.
out_dir: Target directory for documentation files. out_dir: Target directory for documentation files.
""" """
modules = list(project.get_all_modules()) modules = list(project.get_all_modules())

View File

@@ -1,7 +1,7 @@
from pathlib import Path from pathlib import Path
from typing import Set from typing import Set
from docforge.model import Project, Module from docforge.models import Project, Module
class MkDocsRenderer: class MkDocsRenderer:

View File

@@ -1,3 +0,0 @@
# Griffe Loader
::: docforge.loader.griffe_loader

View File

@@ -1,3 +0,0 @@
# Loader
::: docforge.loader

View File

@@ -0,0 +1,3 @@
# Griffe Loader
::: docforge.loaders.griffe_loader

View File

@@ -0,0 +1,3 @@
# Loaders
::: docforge.loaders

View File

@@ -1,3 +0,0 @@
# Model
::: docforge.model

View File

@@ -1,3 +0,0 @@
# Module
::: docforge.model.module

View File

@@ -1,3 +0,0 @@
# Object
::: docforge.model.object

View File

@@ -1,3 +0,0 @@
# Project
::: docforge.model.project

View File

@@ -0,0 +1,3 @@
# Models
::: docforge.models

View File

@@ -0,0 +1,3 @@
# Module
::: docforge.models.module

View File

@@ -0,0 +1,3 @@
# Object
::: docforge.models.object

View File

@@ -0,0 +1,3 @@
# Project
::: docforge.models.project

View File

@@ -36,14 +36,14 @@ plugins:
nav: nav:
- Home: docforge/index.md - Home: docforge/index.md
- Loader: - Loaders:
- docforge/loader/index.md - docforge/loaders/index.md
- docforge/loader/griffe_loader.md - docforge/loaders/griffe_loader.md
- Model: - Models:
- docforge/model/index.md - docforge/models/index.md
- docforge/model/module.md - docforge/models/module.md
- docforge/model/object.md - docforge/models/object.md
- docforge/model/project.md - docforge/models/project.md
- Navigation: - Navigation:
- docforge/nav/index.md - docforge/nav/index.md
- docforge/nav/spec.md - docforge/nav/spec.md

View File

@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "doc-forge" name = "doc-forge"
version = "0.0.1" version = "0.0.2"
description = "A renderer-agnostic Python documentation compiler" description = "A renderer-agnostic Python documentation compiler"
readme = "README.md" readme = "README.md"
requires-python = ">=3.10" requires-python = ">=3.10"

View File

@@ -1,7 +1,7 @@
from pathlib import Path from pathlib import Path
from docforge import MkDocsRenderer from docforge import MkDocsRenderer
from docforge.model import Project, Module from docforge.models import Project, Module
def test_mkdocs_file_content(tmp_path: Path): def test_mkdocs_file_content(tmp_path: Path):

View File

@@ -1,7 +1,7 @@
from pathlib import Path from pathlib import Path
from docforge import MkDocsRenderer from docforge import MkDocsRenderer
from docforge.model import Project, Module from docforge.models import Project, Module
def test_mkdocs_idempotent(tmp_path: Path): def test_mkdocs_idempotent(tmp_path: Path):

View File

@@ -1,6 +1,6 @@
from pathlib import Path from pathlib import Path
from docforge.loader import GriffeLoader, discover_module_paths from docforge.loaders import GriffeLoader, discover_module_paths
from docforge.renderers.mkdocs import MkDocsRenderer from docforge.renderers.mkdocs import MkDocsRenderer
@@ -41,21 +41,21 @@ def test_mkdocs_emits_all_modules(tmp_path: Path) -> None:
# expected = { # expected = {
# 'docforge/cli/main.md', # 'docforge/cli/main.md',
# 'docforge/renderers/index.md', # 'docforge/renderers/index.md',
# 'docforge/loader/index.md', # 'docforge/loaders/index.md',
# 'docforge/model/index.md', # 'docforge/models/index.md',
# 'docforge/nav/index.md', # 'docforge/nav/index.md',
# 'docforge/renderers/mkdocs.md', # 'docforge/renderers/mkdocs.md',
# 'docforge/index.md', # 'docforge/index.md',
# 'docforge/loader/griffe_loader.md', # 'docforge/loaders/griffe_loader.md',
# 'docforge/model/object.md', # 'docforge/models/object.md',
# 'docforge/cli/index.md', # 'docforge/cli/index.md',
# 'docforge/nav/resolver.md', # 'docforge/nav/resolver.md',
# 'docforge/renderers/base.md', # 'docforge/renderers/base.md',
# 'docforge/nav/mkdocs.md', # 'docforge/nav/mkdocs.md',
# 'docforge/nav/spec.md', # 'docforge/nav/spec.md',
# 'docforge/model/module.md', # 'docforge/models/module.md',
# 'docforge/cli/mkdocs.md', # 'docforge/cli/mkdocs.md',
# 'docforge/model/project.md' # 'docforge/models/project.md'
# } # }
missing = expected - emitted missing = expected - emitted
assert not missing, f"Missing markdown files for modules: {missing}" assert not missing, f"Missing markdown files for modules: {missing}"

View File

@@ -1,7 +1,7 @@
from pathlib import Path from pathlib import Path
from docforge import MkDocsRenderer from docforge import MkDocsRenderer
from docforge.model import Project, Module from docforge.models import Project, Module
def test_mkdocs_directory_structure(tmp_path: Path): def test_mkdocs_directory_structure(tmp_path: Path):