""" Gitlint extra rule to validate that the message title is of the form "() " """ import json import re import urllib.request from gitlint.rules import CommitMessageTitle, LineRule, RuleViolation GITMOJIS_URL = "https://raw.githubusercontent.com/carloscuesta/gitmoji/master/packages/gitmojis/src/gitmojis.json" class GitmojiTitle(LineRule): """ This rule will enforce that each commit title is of the form "() " where gitmoji is an emoji from the list defined in https://gitmoji.carloscuesta.me and subject should be all lowercase """ id = "UC1" name = "title-should-have-gitmoji-and-scope" target = CommitMessageTitle def validate(self, title, _commit): """ Download the list possible gitmojis from the project's github repository and check that title contains one of them. """ with urllib.request.urlopen(GITMOJIS_URL, timeout=10) as response: gitmojis = json.load(response)["gitmojis"] emojis = [re.escape(item["emoji"]) for item in gitmojis] pattern = r"^({:s})\(.*\)\s[a-z].*$".format("|".join(emojis)) if not re.search(pattern, title): violation_msg = 'Title does not match regex "() "' return [RuleViolation(self.id, violation_msg, title)]