diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-10-20 04:25:44 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-11-08 00:11:09 +0200 |
commit | 6cd1baa28d8ab0babb766de7a59d10f38fbd786d (patch) | |
tree | 1a66b45140ac9ab7b0a31e0cfea41a2805635d1e /utils | |
parent | fa63d428aef62bacf0a6ad1622a7965b3ff2ba2f (diff) |
utils: checkstyle.py: Add d-pointer formatter
Add a formatter to ensure consistent naming of 'd' and 'o' variables
related to the d-pointer design pattern, as implemented by the
Extensible class. The formatter also ensures that the pointer is always
const. const-correctness issues related to the data pointed to will be
caught by the compiler, and thus don't need to be checked here.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/checkstyle.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/utils/checkstyle.py b/utils/checkstyle.py index d5dc26c0..7225cac4 100755 --- a/utils/checkstyle.py +++ b/utils/checkstyle.py @@ -481,6 +481,38 @@ class DoxygenFormatter(Formatter): return '\n'.join(lines) +class DPointerFormatter(Formatter): + # Ensure consistent naming of variables related to the d-pointer design + # pattern. + patterns = ('*.cpp', '*.h') + + # The clang formatter runs first, we can thus rely on appropriate coding + # style. + declare_regex = re.compile(r'^(\t*)(const )?([a-zA-Z0-9_]+) \*( ?const )?([a-zA-Z0-9_]+) = (LIBCAMERA_[DO]_PTR)\(([a-zA-Z0-9_]+)\);$') + + @classmethod + def format(cls, filename, data): + lines = [] + + for line in data.split('\n'): + match = cls.declare_regex.match(line) + if match: + indent = match.group(1) or '' + const = match.group(2) or '' + macro = match.group(6) + klass = match.group(7) + if macro == 'LIBCAMERA_D_PTR': + var = 'Private *const d' + else: + var = f'{klass} *const o' + + line = f'{indent}{const}{var} = {macro}({klass});' + + lines.append(line) + + return '\n'.join(lines) + + class IncludeOrderFormatter(Formatter): patterns = ('*.cpp', '*.h') |