docs: bring docforge docstrings and wiki to GSDFC standard
- fix GSDFC spec contradictions in __init__ docstring (parenthesized types, fenced-block rule) and sync generated README - rewrite docstrings across loaders, models, nav, servers, renderers, cli; sync .pyi stubs - add pydoclint (google style) gate to dev extras and pyproject config - fix mcp nav resources doc:// -> docs:// - refresh docs/lib and docs/mcp, drop stale docforge/ duplicate group - update wiki pages and add GSDFC + MCP guides under 05_development
This commit is contained in:
@@ -6,6 +6,14 @@ Utilities for loading and introspecting Python modules using Griffe.
|
||||
This module provides the `GriffeLoader` class and helper utilities used to
|
||||
discover Python modules, introspect their structure, and convert the results
|
||||
into doc-forge documentation models.
|
||||
|
||||
---
|
||||
|
||||
Notes:
|
||||
- All analysis is static; analyzed modules are never executed.
|
||||
- Private members (names starting with `_`) are skipped during conversion.
|
||||
|
||||
---
|
||||
"""
|
||||
|
||||
import logging
|
||||
@@ -46,12 +54,12 @@ def discover_module_paths(
|
||||
module_name (str):
|
||||
Top-level package name to discover modules from.
|
||||
|
||||
project_root (Path, optional):
|
||||
project_root (Path | None):
|
||||
Root directory used to resolve module paths. If not provided, the
|
||||
current working directory is used.
|
||||
|
||||
Returns:
|
||||
List[str]:
|
||||
list[str]:
|
||||
A sorted list of unique dotted module import paths.
|
||||
|
||||
Raises:
|
||||
@@ -88,6 +96,10 @@ class GriffeLoader:
|
||||
This loader uses the Griffe introspection engine to analyze Python source
|
||||
code and transform the extracted information into `Project`, `Module`,
|
||||
and `DocObject` instances used by doc-forge.
|
||||
|
||||
Attributes:
|
||||
_loader (_GriffeLoader):
|
||||
Internal Griffe loader with dedicated module and line collections.
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
@@ -106,7 +118,7 @@ class GriffeLoader:
|
||||
self,
|
||||
module_paths: list[str],
|
||||
project_name: str | None = None,
|
||||
skip_import_errors: bool = None,
|
||||
skip_import_errors: bool | None = None,
|
||||
) -> Project:
|
||||
"""
|
||||
Load multiple modules and assemble them into a Project model.
|
||||
@@ -116,14 +128,14 @@ class GriffeLoader:
|
||||
object.
|
||||
|
||||
Args:
|
||||
module_paths (List[str]):
|
||||
module_paths (list[str]):
|
||||
List of dotted module import paths to load.
|
||||
|
||||
project_name (str, optional):
|
||||
project_name (str | None):
|
||||
Optional override for the project name. Defaults to the top-level
|
||||
name of the first module.
|
||||
|
||||
skip_import_errors (bool, optional):
|
||||
skip_import_errors (bool | None):
|
||||
If True, modules that fail to load will be skipped instead of raising an error.
|
||||
|
||||
Returns:
|
||||
@@ -172,6 +184,21 @@ class GriffeLoader:
|
||||
Returns:
|
||||
Module:
|
||||
A populated `Module` instance.
|
||||
|
||||
Raises:
|
||||
ImportError:
|
||||
If the module cannot be loaded by Griffe.
|
||||
|
||||
KeyError:
|
||||
If the loaded module is missing from the module collection.
|
||||
|
||||
Example:
|
||||
Load a single module:
|
||||
|
||||
```python
|
||||
loader = GriffeLoader()
|
||||
module = loader.load_module("mypackage.submodule")
|
||||
```
|
||||
"""
|
||||
self._loader.load(path)
|
||||
griffe_module = self._loader.modules_collection[path]
|
||||
@@ -260,7 +287,7 @@ class GriffeLoader:
|
||||
Griffe object to inspect.
|
||||
|
||||
Returns:
|
||||
Optional[str]:
|
||||
str | None:
|
||||
The raw docstring text if available, otherwise `None`.
|
||||
"""
|
||||
try:
|
||||
@@ -277,7 +304,7 @@ class GriffeLoader:
|
||||
Griffe object to inspect.
|
||||
|
||||
Returns:
|
||||
Optional[str]:
|
||||
str | None:
|
||||
String representation of the object's signature if available, otherwise `None`.
|
||||
"""
|
||||
try:
|
||||
|
||||
@@ -11,6 +11,7 @@ class GriffeLoader:
|
||||
"""Griffe-based introspection loaders.
|
||||
|
||||
This is the only supported introspection backend in doc-forge.
|
||||
Converts Griffe results into `Project`, `Module`, and `DocObject` models.
|
||||
"""
|
||||
|
||||
def __init__(self) -> None: ...
|
||||
@@ -18,7 +19,7 @@ class GriffeLoader:
|
||||
self,
|
||||
module_paths: list[str],
|
||||
project_name: str | None = ...,
|
||||
skip_import_errors: bool = ...,
|
||||
skip_import_errors: bool | None = ...,
|
||||
) -> Project:
|
||||
"""Load a documentation project from Python modules."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user