On 06/25/2018 07:41 AM, Philippe Mathieu-Daudé wrote:
> Do not match the IEC binary prefix as camelcase typedefs.
>
> This fixes:
>
> ERROR: "foo * bar" should be "foo *bar"
> #310: FILE: hw/ppc/ppc440_uc.c:564:
> + size = 8 * MiB * sh;
> total: 1 errors, 0 warnings, 433 lines checked
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> scripts/checkpatch.pl | 1 +
> 1 file changed, 1 insertion(+)
Warning - my perl regex-fu is weak; but I'll give this a shot.
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index e3d8c2cdfc..223681bfd0 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -242,6 +242,7 @@ our $UTF8 = qr{
> # There are still some false positives, but this catches most
> # common cases.
> our $typeTypedefs = qr{(?x:
> + (?![KMGTPE]iB) # IEC binary prefix (do not match)
I had to (re-)read 'perldoc perlretut', but found what I was looking
for. You are adding a zero-length negated lookahead assertion that
anything matching the pattern [KMGTPE]iB is not matched to the rest of
the regex.
> [A-Z][A-Z\d_]*[a-z][A-Za-z\d_]* # camelcase
> | [A-Z][A-Z\d_]*AIOCB # all uppercase
> | [A-Z][A-Z\d_]*CPU # all uppercase
and the rest of this regex is picking out any sequence that the code
should treat as a typedef. Ergo, with your negative lookahead, we are
no longer treating the numeric mixed-case constants as typedefs, and the
rest of the script that warns on formatting issues where a typedef
appears to be used with a '*' for creating a pointer no longer trigger.
Since that's enough to shut up the false positives you were seeing, then
it looks right to me.
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org