from __future__ import annotations

from click import ClickException, echo


class MkDocsException(ClickException):
    """
    The base class which all MkDocs exceptions inherit from. This should
    not be raised directly. One of the subclasses should be raised instead.
    """


class Abort(MkDocsException, SystemExit):
    """Abort the build."""

    code = 1

    def show(self, *args, **kwargs) -> None:
        echo('\n' + self.format_message())


class ConfigurationError(MkDocsException):
    """
    This error is raised by configuration validation when a validation error
    is encountered. This error should be raised by any configuration options
    defined in a plugin's [config_scheme][].
    """


class BuildError(MkDocsException):
    """
    This error may be raised by MkDocs during the build process. Plugins should
    not raise this error.
    """


class PluginError(BuildError):
    """
    A subclass of [`mkdocs.exceptions.BuildError`][] which can be raised by plugin
    events.
    """
