39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
import logging
|
|
|
|
LOG = logging.getLogger("gitlint.deprecated")
|
|
DEPRECATED_LOG_FORMAT = "%(levelname)s: %(message)s"
|
|
|
|
|
|
class Deprecation:
|
|
"""Singleton class that handles deprecation warnings and behavior."""
|
|
|
|
# LintConfig class that is used to determine deprecation behavior
|
|
config = None
|
|
|
|
# Set of warning messages that have already been logged, to prevent duplicate warnings
|
|
warning_msgs = set()
|
|
|
|
@classmethod
|
|
def get_regex_method(cls, rule, regex_option):
|
|
"""Returns the regex method to be used for a given rule based on general.regex-style-search option.
|
|
Logs a warning if the deprecated re.match method is returned."""
|
|
|
|
# if general.regex-style-search is set, just return re.search
|
|
if cls.config.regex_style_search:
|
|
return regex_option.value.search
|
|
|
|
warning_msg = (
|
|
f"{rule.id} - {rule.name}: gitlint will be switching from using Python regex 'match' (match beginning) to "
|
|
"'search' (match anywhere) semantics. "
|
|
f"Please review your {rule.name}.regex option accordingly. "
|
|
"To remove this warning, set general.regex-style-search=True. "
|
|
"More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search"
|
|
)
|
|
|
|
# Only log warnings once
|
|
if warning_msg not in cls.warning_msgs:
|
|
log = logging.getLogger("gitlint.deprecated.regex_style_search")
|
|
log.warning(warning_msg)
|
|
cls.warning_msgs.add(warning_msg)
|
|
|
|
return regex_option.value.match
|