mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-13 15:29:45 +03:00
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)
|
||||
|
||||
|
||||
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')
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue