summaryrefslogtreecommitdiffstats
path: root/gitlint-core/gitlint/deprecation.py
diff options
context:
space:
mode:
Diffstat (limited to 'gitlint-core/gitlint/deprecation.py')
-rw-r--r--gitlint-core/gitlint/deprecation.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/gitlint-core/gitlint/deprecation.py b/gitlint-core/gitlint/deprecation.py
new file mode 100644
index 0000000..b7c2f42
--- /dev/null
+++ b/gitlint-core/gitlint/deprecation.py
@@ -0,0 +1,39 @@
+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