[PATCH] scripts: kernel-doc: fix parsing function-like typedefs (again)

Sean Anderson posted 1 patch 3 weeks, 6 days ago
scripts/kernel-doc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] scripts: kernel-doc: fix parsing function-like typedefs (again)
Posted by Sean Anderson 3 weeks, 6 days ago
Typedefs like

    typedef struct phylink_pcs *(*pcs_xlate_t)(const u64 *args);

have a typedef_type that ends with a * and therefore has no word
boundary. Add an extra clause for the final group of the typedef_type so
we only require a word boundary if we match a word.

Fixes: 7d2c6b1edf79 ("scripts: kernel-doc: fix parsing function-like typedefs")
Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
---

 scripts/kernel-doc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index af6cf408b96d..5db23cbf4eb2 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1325,7 +1325,7 @@ sub dump_enum($$) {
     }
 }
 
-my $typedef_type = qr { ((?:\s+[\w\*]+\b){1,8})\s* }x;
+my $typedef_type = qr { ((?:\s+[\w\*]+\b){0,7}\s+(?:\w+\b|\*+))\s* }x;
 my $typedef_ident = qr { \*?\s*(\w\S+)\s* }x;
 my $typedef_args = qr { \s*\((.*)\); }x;
 
-- 
2.35.1.1320.gc452695387.dirty
Re: [PATCH] scripts: kernel-doc: fix parsing function-like typedefs (again)
Posted by Jonathan Corbet 3 weeks, 6 days ago
Sean Anderson <sean.anderson@linux.dev> writes:

> Typedefs like
>
>     typedef struct phylink_pcs *(*pcs_xlate_t)(const u64 *args);
>
> have a typedef_type that ends with a * and therefore has no word
> boundary. Add an extra clause for the final group of the typedef_type so
> we only require a word boundary if we match a word.
>
> Fixes: 7d2c6b1edf79 ("scripts: kernel-doc: fix parsing function-like typedefs")
> Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
> ---
>
>  scripts/kernel-doc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> index af6cf408b96d..5db23cbf4eb2 100755
> --- a/scripts/kernel-doc
> +++ b/scripts/kernel-doc
> @@ -1325,7 +1325,7 @@ sub dump_enum($$) {
>      }
>  }
>  
> -my $typedef_type = qr { ((?:\s+[\w\*]+\b){1,8})\s* }x;
> +my $typedef_type = qr { ((?:\s+[\w\*]+\b){0,7}\s+(?:\w+\b|\*+))\s* }x;
>  my $typedef_ident = qr { \*?\s*(\w\S+)\s* }x;
>  my $typedef_args = qr { \s*\((.*)\); }x;

This seems like a worth fix but ... we're kind of hoping to replace that
script entirely in 6.16.

Mauro, do you have a series for me along those lines?  It seems like
time to put that in if we're going to do it.  Then maybe this fix could
be adapted on top?

Thanks,

jon
Re: [PATCH] scripts: kernel-doc: fix parsing function-like typedefs (again)
Posted by Mauro Carvalho Chehab 3 weeks, 5 days ago
Em Mon, 07 Apr 2025 16:34:24 -0600
Jonathan Corbet <corbet@lwn.net> escreveu:

> Sean Anderson <sean.anderson@linux.dev> writes:
> 
> > Typedefs like
> >
> >     typedef struct phylink_pcs *(*pcs_xlate_t)(const u64 *args);
> >
> > have a typedef_type that ends with a * and therefore has no word
> > boundary. Add an extra clause for the final group of the typedef_type so
> > we only require a word boundary if we match a word.
> >
> > Fixes: 7d2c6b1edf79 ("scripts: kernel-doc: fix parsing function-like typedefs")
> > Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
> > ---
> >
> >  scripts/kernel-doc | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> > index af6cf408b96d..5db23cbf4eb2 100755
> > --- a/scripts/kernel-doc
> > +++ b/scripts/kernel-doc
> > @@ -1325,7 +1325,7 @@ sub dump_enum($$) {
> >      }
> >  }
> >  
> > -my $typedef_type = qr { ((?:\s+[\w\*]+\b){1,8})\s* }x;
> > +my $typedef_type = qr { ((?:\s+[\w\*]+\b){0,7}\s+(?:\w+\b|\*+))\s* }x;
> >  my $typedef_ident = qr { \*?\s*(\w\S+)\s* }x;
> >  my $typedef_args = qr { \s*\((.*)\); }x;  
> 
> This seems like a worth fix but ... we're kind of hoping to replace that
> script entirely in 6.16.

Hi Jon,

The same regex was preserved at:	

scripts/lib/kdoc/kdoc_parser.py:        typedef_type = r'((?:\s+[\w\*]+\b){1,8})\s*'

It sounds to me that all we need to to is to rebase this change from
kernel-doc to kdoc_parser.py.

> 
> Mauro, do you have a series for me along those lines?  It seems like
> time to put that in if we're going to do it.  Then maybe this fix could
> be adapted on top?

I'll rebase my latest series on the top of upstream and send you.

If you prefer, I can rebase this patch on the top of it, preserving
its original authorship and adding something like:

	[mchehab: modified to apply on the top of kdoc_parser.py]

and submit altogether.

Another alternative would be for you to merge first my series, and then
Sean would send you a version of it on the top of the new kernel-doc.py.

Regards,
Mauro