Commit df9b2cba authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Sam Ravnborg

kerneldoc: Fix comma separated members.

This patch teaches scripts/kernel-doc to print descriptions
of comma separated variables correctly instead of ignoring
them.

Tested on 'make pdfdocs' and 'scripts/kernel-doc -text test.c'.
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent 29d28b2a
...@@ -26,6 +26,8 @@ use strict; ...@@ -26,6 +26,8 @@ use strict;
# Still to do: # Still to do:
# - add perldoc documentation # - add perldoc documentation
# - Look more closely at some of the scarier bits :) # - Look more closely at some of the scarier bits :)
# - Clean up mess that #ifdefs and comments inside structs
# definitions leave.
# 26/05/2001 - Support for separate source and object trees. # 26/05/2001 - Support for separate source and object trees.
# Return error code. # Return error code.
...@@ -36,6 +38,8 @@ use strict; ...@@ -36,6 +38,8 @@ use strict;
# Small fixes (like spaces vs. \s in regex) # Small fixes (like spaces vs. \s in regex)
# -- Tim Jansen <tim@tjansen.de> # -- Tim Jansen <tim@tjansen.de>
# 18/04/2004 - Comma separated members inside structs definitions are ok now.
# -- Alexey Dobriyan <adobriyan@mail.ru>
# #
# This will read a 'c' file and scan for embedded comments in the # This will read a 'c' file and scan for embedded comments in the
...@@ -105,10 +109,7 @@ use strict; ...@@ -105,10 +109,7 @@ use strict;
# enums and typedefs. Instead of the function name you must write the name # enums and typedefs. Instead of the function name you must write the name
# of the declaration; the struct/union/enum/typedef must always precede # of the declaration; the struct/union/enum/typedef must always precede
# the name. Nesting of declarations is not supported. # the name. Nesting of declarations is not supported.
# Use the argument mechanism to document members or constants. In # Use the argument mechanism to document members or constants.
# structs and unions you must declare one member per declaration
# (comma-separated members are not allowed - the parser does not support
# this).
# e.g. # e.g.
# /** # /**
# * struct my_struct - short description # * struct my_struct - short description
...@@ -1318,51 +1319,62 @@ sub create_parameterlist($$$) { ...@@ -1318,51 +1319,62 @@ sub create_parameterlist($$$) {
$param = $1; $param = $1;
$type = $arg; $type = $arg;
$type =~ s/([^\(]+\(\*)$param/$1/; $type =~ s/([^\(]+\(\*)$param/$1/;
push_parameter($type, $param, $file);
} else { } else {
# evil magic to get fixed array parameters to work # evil magic to get fixed array parameters to work
# 'char cb[48]' => 'char* cb'
$arg =~ s/(.+\s+)(.+)\[.*/$1* $2/; $arg =~ s/(.+\s+)(.+)\[.*/$1* $2/;
my @args = split('\s', $arg);
my @args = split(',\s*', $arg);
$param = pop @args;
if ($param =~ m/^(\*+)(.*)/) { my @first_arg = split('\s', shift @args);
$param = $2; unshift(@args, pop @first_arg);
push @args, $1; $type = join " ", @first_arg;
}
elsif ($param =~ m/(.*?)\s*:\s*(\d+)/) { foreach $param (@args) {
$param = $1; if ($param =~ m/^(\*+)(.*)/) {
push @args, ":$2"; # pointer
push_parameter("$type$1", $2, $file);
} elsif ($param =~ m/(.*?)\s*:\s*(\d+)/) {
# bitfield
push_parameter("$type:$2", $1, $file);
} else {
push_parameter($type, $param, $file);
}
} }
$type = join " ", @args;
} }
}
}
if ($type eq "" && $param eq "...") sub push_parameter($$$) {
{ my $type = shift;
$type="..."; my $param = shift;
$param="..."; my $file = shift;
$parameterdescs{"..."} = "variable arguments";
}
elsif ($type eq "" && ($param eq "" or $param eq "void"))
{
$type="";
$param="void";
$parameterdescs{void} = "no arguments";
}
if (defined $type && $type && !defined $parameterdescs{$param}) {
$parameterdescs{$param} = $undescribed;
if (($type eq 'function') || ($type eq 'enum')) { if ($type eq "" && $param eq "...") {
print STDERR "Warning(${file}:$.): Function parameter ". $type="...";
$param="...";
$parameterdescs{"..."} = "variable arguments";
} elsif ($type eq "" && ($param eq "" or $param eq "void")) {
$type="";
$param="void";
$parameterdescs{void} = "no arguments";
}
if (defined $type && $type && !defined $parameterdescs{$param}) {
$parameterdescs{$param} = $undescribed;
if (($type eq 'function') || ($type eq 'enum')) {
print STDERR "Warning(${file}:$.): Function parameter ".
"or member '$param' not " . "or member '$param' not " .
"described in '$declaration_name'\n"; "described in '$declaration_name'\n";
} }
print STDERR "Warning(${file}:$.):". print STDERR "Warning(${file}:$.):".
" No description found for parameter '$param'\n"; " No description found for parameter '$param'\n";
++$warnings; ++$warnings;
}
push @parameterlist, $param;
$parametertypes{$param} = $type;
} }
push @parameterlist, $param;
$parametertypes{$param} = $type;
} }
## ##
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment