Coverage for src/jsoncrack_for_sphinx/core/extension.py: 100%
34 statements
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-24 22:26 +0000
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-24 22:26 +0000
1"""
2Main Sphinx extension module for JSONCrack JSON schema visualization.
3"""
5import logging as std_logging
6from pathlib import Path
7from typing import Any, Dict
9from sphinx.application import Sphinx
10from sphinx.util import logging
12from .autodoc import autodoc_process_docstring, autodoc_process_signature
13from .directive import SchemaDirective
15logger = logging.getLogger(__name__)
18def setup(app: Sphinx) -> Dict[str, Any]:
19 """Set up the Sphinx extension."""
20 # Add configuration values for new structured config
21 app.add_config_value("json_schema_dir", None, "env")
22 app.add_config_value("jsoncrack_default_options", {}, "env")
23 app.add_config_value("jsoncrack_debug_logging", False, "env")
25 # Add configuration values for backward compatibility
26 app.add_config_value("jsoncrack_render_mode", "onclick", "env")
27 app.add_config_value("jsoncrack_theme", None, "env")
28 app.add_config_value("jsoncrack_direction", "RIGHT", "env")
29 app.add_config_value("jsoncrack_height", "500", "env")
30 app.add_config_value("jsoncrack_width", "100%", "env")
31 app.add_config_value("jsoncrack_onscreen_threshold", 0.1, "env")
32 app.add_config_value("jsoncrack_onscreen_margin", "50px", "env")
33 app.add_config_value("jsoncrack_disable_autodoc", False, "env")
34 app.add_config_value("jsoncrack_autodoc_ignore", [], "env")
36 # Configure logging level if debug is enabled
37 if getattr(app.config, "jsoncrack_debug_logging", False):
38 # Enable verbose logging
39 std_logger = std_logging.getLogger("jsoncrack_for_sphinx")
40 std_logger.setLevel(std_logging.DEBUG)
41 logger.info("JSONCrack debug logging enabled")
43 # Add directive
44 app.add_directive("schema", SchemaDirective)
46 # Connect to autodoc events
47 app.connect("autodoc-process-signature", autodoc_process_signature)
48 app.connect("autodoc-process-docstring", autodoc_process_docstring)
50 # Add CSS and JS for styling and functionality
51 static_path = Path(__file__).parent.parent / "static"
52 app.config.html_static_path.append(str(static_path))
53 app.add_css_file("jsoncrack-schema.css")
54 app.add_js_file("jsoncrack-sphinx.js")
56 logger.info("JSONCrack Sphinx extension initialized")
58 return {
59 "version": "0.1.0",
60 "parallel_read_safe": True,
61 "parallel_write_safe": True,
62 }