> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Mauro Carvalho Chehab
> Sent: Thursday, January 29, 2026 9:08 AM
> To: Jonathan Corbet <[email protected]>; Linux Doc Mailing List <linux-
> [email protected]>
> Cc: Mauro Carvalho Chehab <[email protected]>;
> [email protected]; [email protected]; linux-
> [email protected]; [email protected];
> [email protected]; Mauro Carvalho Chehab <[email protected]>;
> Randy Dunlap <[email protected]>
> Subject: [Intel-wired-lan] [PATCH v3 05/30] docs: kdoc_parser: add
> functions support for NestedMatch
> 
> Some annotations macros may have nested parenthesis, causing normal
> regex parsing to fail.
> 
> Extend apply_transforms to also use NestedMatch and add support for
> nested functions.
> 
> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
> Acked-by: Randy Dunlap <[email protected]>
> Tested-by: Randy Dunlap <[email protected]>
> ---
>  tools/lib/python/kdoc/kdoc_parser.py | 38 ++++++++++++++++++---------
> -
>  1 file changed, 25 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/lib/python/kdoc/kdoc_parser.py
> b/tools/lib/python/kdoc/kdoc_parser.py
> index 3ba2cda2487a..ae5b2ef80f75 100644
> --- a/tools/lib/python/kdoc/kdoc_parser.py
> +++ b/tools/lib/python/kdoc/kdoc_parser.py
> @@ -152,7 +152,7 @@ struct_xforms = [
>      (KernRe(r'DEFINE_DMA_UNMAP_LEN\s*\(' + struct_args_pattern +
> r'\)', re.S), r'__u32 \1'),  ]  # -# Regexes here are guaranteed to
> have the end delimiter matching
> +# Struct regexes here are guaranteed to have the end delimiter
> matching
>  # the start delimiter. Yet, right now, only one replace group  # is
> allowed.
>  #
> @@ -160,6 +160,13 @@ struct_nested_prefixes = [
>      (re.compile(r'\bSTRUCT_GROUP\('), r'\1'),  ]
> 
> +#
> +# Function Regexes here are guaranteed to have the end delimiter
> +matching # the start delimiter.
> +#
> +function_nested_prefixes = [
> +]
> +
>  #
>  # Transforms for function prototypes
>  #
> @@ -207,13 +214,6 @@ var_xforms = [
>  # Ancillary functions
>  #
> 
> -def apply_transforms(xforms, text):
> -    """
> -    Apply a set of transforms to a block of text.
> -    """
> -    for search, subst in xforms:
> -        text = search.sub(subst, text)
> -    return text
> 
>  multi_space = KernRe(r'\s\s+')
>  def trim_whitespace(s):
> @@ -408,6 +408,8 @@ class KernelDoc:
>          # Place all potential outputs into an array
>          self.entries = []
> 
> +        self.nested = NestedMatch()
> +
>          #
>          # We need Python 3.7 for its "dicts remember the insertion
>          # order" guarantee
> @@ -505,6 +507,16 @@ class KernelDoc:
>          # State flags
>          self.state = state.NORMAL
> 
> +    def apply_transforms(self, regex_xforms, nested_xforms, text):
> +        """Apply a set of transforms to a block of text."""
> +        for search, subst in regex_xforms:
> +            text = search.sub(subst, text)
> +
> +        for search, sub in nested_xforms:
> +            text = self.nested.sub(search, sub, text)
> +
> +        return text.strip()
> +
>      def push_parameter(self, ln, decl_type, param, dtype,
>                         org_arg, declaration_name):
>          """
> @@ -881,11 +893,9 @@ class KernelDoc:
>          # Go through the list of members applying all of our
> transformations.
>          #
>          members = trim_private_members(members)
> -        members = apply_transforms(struct_xforms, members)
> +        members = self.apply_transforms(struct_xforms,
> struct_nested_prefixes,
> +                                        members)
> 
> -        nested = NestedMatch()
> -        for search, sub in struct_nested_prefixes:
> -            members = nested.sub(search, sub, members)
>          #
>          # Deal with embedded struct and union members, and drop enums
> entirely.
>          #
> @@ -1088,7 +1098,9 @@ class KernelDoc:
>              #
>              # Apply the initial transformations.
>              #
> -            prototype = apply_transforms(function_xforms, prototype)
> +            prototype = self.apply_transforms(function_xforms,
> +
> function_nested_prefixes,
> +                                              prototype)
> 
>          # Yes, this truly is vile.  We are looking for:
>          # 1. Return type (may be nothing if we're looking at a macro)
> --
> 2.52.0

Reviewed-by: Aleksandr Loktionov <[email protected]>

Reply via email to