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>
This commit is contained in:
parent
fa63d428ae
commit
6cd1baa28d
1 changed files with 32 additions and 0 deletions
|
@ -481,6 +481,38 @@ class DoxygenFormatter(Formatter):
|
||||||
return '\n'.join(lines)
|
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):
|
class IncludeOrderFormatter(Formatter):
|
||||||
patterns = ('*.cpp', '*.h')
|
patterns = ('*.cpp', '*.h')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue