[libcamera-devel] [PATCH v2 1/5] utils: checkstyle.py: Add d-pointer formatter

Niklas Söderlund niklas.soderlund at ragnatech.se
Tue Oct 20 12:59:44 CEST 2020


Hi Laurent,

Thanks for your work.

On 2020-10-20 04:40:01 +0300, Laurent Pinchart wrote:
> 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 at ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> ---
>  utils/checkstyle.py | 32 ++++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/utils/checkstyle.py b/utils/checkstyle.py
> index d5dc26c0f666..7225cac47a4e 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')
>  
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list