utils: checkstyle.py: Factor out automatic class registry
The style checkers and formatters duplicate automatic class registry code. Factor it out to a common ClassRegistry helper class. The list of subclasses is moved to a class member variable of the auto-registered base class type. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
b402734e5a
commit
86efa9c7e9
1 changed files with 17 additions and 22 deletions
|
@ -191,20 +191,24 @@ def parse_diff(diff):
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Style Checkers
|
# Helpers
|
||||||
#
|
#
|
||||||
|
|
||||||
_style_checkers = []
|
class ClassRegistry(type):
|
||||||
|
|
||||||
class StyleCheckerRegistry(type):
|
|
||||||
def __new__(cls, clsname, bases, attrs):
|
def __new__(cls, clsname, bases, attrs):
|
||||||
newclass = super().__new__(cls, clsname, bases, attrs)
|
newclass = super().__new__(cls, clsname, bases, attrs)
|
||||||
if clsname != 'StyleChecker':
|
if bases:
|
||||||
_style_checkers.append(newclass)
|
bases[0].subclasses.append(newclass)
|
||||||
return newclass
|
return newclass
|
||||||
|
|
||||||
|
|
||||||
class StyleChecker(metaclass=StyleCheckerRegistry):
|
# ------------------------------------------------------------------------------
|
||||||
|
# Style Checkers
|
||||||
|
#
|
||||||
|
|
||||||
|
class StyleChecker(metaclass=ClassRegistry):
|
||||||
|
subclasses = []
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -213,7 +217,7 @@ class StyleChecker(metaclass=StyleCheckerRegistry):
|
||||||
#
|
#
|
||||||
@classmethod
|
@classmethod
|
||||||
def checkers(cls, filename):
|
def checkers(cls, filename):
|
||||||
for checker in _style_checkers:
|
for checker in cls.subclasses:
|
||||||
if checker.supports(filename):
|
if checker.supports(filename):
|
||||||
yield checker
|
yield checker
|
||||||
|
|
||||||
|
@ -227,7 +231,7 @@ class StyleChecker(metaclass=StyleCheckerRegistry):
|
||||||
@classmethod
|
@classmethod
|
||||||
def all_patterns(cls):
|
def all_patterns(cls):
|
||||||
patterns = set()
|
patterns = set()
|
||||||
for checker in _style_checkers:
|
for checker in cls.subclasses:
|
||||||
patterns.update(checker.patterns)
|
patterns.update(checker.patterns)
|
||||||
|
|
||||||
return patterns
|
return patterns
|
||||||
|
@ -383,18 +387,9 @@ class ShellChecker(StyleChecker):
|
||||||
# Formatters
|
# Formatters
|
||||||
#
|
#
|
||||||
|
|
||||||
_formatters = []
|
class Formatter(metaclass=ClassRegistry):
|
||||||
|
|
||||||
class FormatterRegistry(type):
|
|
||||||
def __new__(cls, clsname, bases, attrs):
|
|
||||||
newclass = super().__new__(cls, clsname, bases, attrs)
|
|
||||||
if clsname != 'Formatter':
|
|
||||||
_formatters.append(newclass)
|
|
||||||
return newclass
|
|
||||||
|
|
||||||
|
|
||||||
class Formatter(metaclass=FormatterRegistry):
|
|
||||||
enabled = True
|
enabled = True
|
||||||
|
subclasses = []
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
@ -404,7 +399,7 @@ class Formatter(metaclass=FormatterRegistry):
|
||||||
#
|
#
|
||||||
@classmethod
|
@classmethod
|
||||||
def formatters(cls, filename):
|
def formatters(cls, filename):
|
||||||
for formatter in _formatters:
|
for formatter in cls.subclasses:
|
||||||
if not cls.enabled:
|
if not cls.enabled:
|
||||||
continue
|
continue
|
||||||
if formatter.supports(filename):
|
if formatter.supports(filename):
|
||||||
|
@ -422,7 +417,7 @@ class Formatter(metaclass=FormatterRegistry):
|
||||||
@classmethod
|
@classmethod
|
||||||
def all_patterns(cls):
|
def all_patterns(cls):
|
||||||
patterns = set()
|
patterns = set()
|
||||||
for formatter in _formatters:
|
for formatter in cls.subclasses:
|
||||||
if not cls.enabled:
|
if not cls.enabled:
|
||||||
continue
|
continue
|
||||||
patterns.update(formatter.patterns)
|
patterns.update(formatter.patterns)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue