2626 from tox .config .cli .parser import ToxParser
2727 from tox .config .sets import ConfigSet , EnvConfigSet
2828 from tox .execute import Outcome
29+ from tox .report .formatter import ReportFormatterRegister
2930 from tox .session .state import State
3031 from tox .tox_env .api import ToxEnv
3132
@@ -52,6 +53,8 @@ def _register_plugins(self, inline: ModuleType | None) -> None:
5253 if inline is not None :
5354 self .manager .register (inline )
5455 self ._load_external_plugins ()
56+ from tox .report import config as report_config # noqa: PLC0415
57+
5558 internal_plugins = (
5659 loader_api ,
5760 provision ,
@@ -70,6 +73,7 @@ def _register_plugins(self, inline: ModuleType | None) -> None:
7073 parallel ,
7174 sequential ,
7275 package_api ,
76+ report_config ,
7377 )
7478 for plugin in internal_plugins :
7579 self .manager .register (plugin )
@@ -111,12 +115,28 @@ def tox_on_install(self, tox_env: ToxEnv, arguments: Any, section: str, of_type:
111115 def tox_env_teardown (self , tox_env : ToxEnv ) -> None :
112116 self .manager .hook .tox_env_teardown (tox_env = tox_env )
113117
118+ def tox_register_report_formatter (self , register : ReportFormatterRegister ) -> None :
119+ self .manager .hook .tox_register_report_formatter (register = register )
120+
121+ def _register_builtin_report_formatters (self ) -> None :
122+ """Register built-in report formatters."""
123+ from tox .report .formatter import REGISTER # noqa: PLC0415
124+ from tox .report .formatters import JsonFormatter , XmlFormatter # noqa: PLC0415
125+
126+ # Register built-in formatters
127+ REGISTER .register (JsonFormatter ())
128+ REGISTER .register (XmlFormatter ())
129+
130+ # Allow plugins to register additional formatters
131+ self .manager .hook .tox_register_report_formatter (register = REGISTER )
132+
114133 def load_plugins (self , path : Path ) -> None :
115134 for _plugin in self .manager .get_plugins (): # make sure we start with a clean state, repeated in memory run
116135 self .manager .unregister (_plugin )
117136 inline = _load_inline (path )
118137 self ._register_plugins (inline )
119138 REGISTER ._register_tox_env_types (self ) # noqa: SLF001
139+ self ._register_builtin_report_formatters ()
120140
121141
122142def _load_inline (path : Path ) -> ModuleType | None : # used to be able to unregister plugin tests
0 commit comments