[PATCH] kernel-doc: fix line number handling

From: Mauro Carvalho Chehab
Date: Fri Oct 09 2020 - 04:55:00 EST


Address several issues related to pointing to the wrong line
number:

1) ensure that line numbers will always be initialized

When section is the default (Description), the line number
is not initializing, producing this:

$ ./scripts/kernel-doc --enable-lineno ./drivers/media/v4l2-core/v4l2-mem2mem.c|less

**Description**

#define LINENO 0
In case of streamoff or release called on any context,
1] If the context is currently running, then abort job will be called
2] If the context is queued, then the context will be removed from
the job_queue

Which is not right. Ensure that the line number will always
be there. After applied, the result now points to the right location:

**Description**

#define LINENO 410
In case of streamoff or release called on any context,
1] If the context is currently running, then abort job will be called
2] If the context is queued, then the context will be removed from
the job_queue

2) The line numbers for function prototypes are always + 1,
because it is taken at the line after handling the prototype.
Change the logic to point to the next line after the /** */
block;

3) The "DOC:" line number should point to the same line as this
markup is found, and not to the next one.

Probably part of the issues were due to a but that was causing
the line number offset to be incremented by one, if --export
were used.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
---
scripts/kernel-doc | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index a3453de4495c..297312824d26 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1706,7 +1706,7 @@ sub dump_function($$) {
my $file = shift;
my $noret = 0;

- print_lineno($.);
+ print_lineno($new_start_line);

$prototype =~ s/^static +//;
$prototype =~ s/^extern +//;
@@ -2034,7 +2034,7 @@ sub process_name($$) {
if (/$doc_block/o) {
$state = STATE_DOCBLOCK;
$contents = "";
- $new_start_line = $. + 1;
+ $new_start_line = $.;

if ( $1 eq "" ) {
$section = $section_intro;
@@ -2117,6 +2117,7 @@ sub process_body($$) {
if ($state == STATE_BODY_WITH_BLANK_LINE && /^\s*\*\s?\S/) {
dump_section($file, $section, $contents);
$section = $section_default;
+ $new_start_line = $.;
$contents = "";
}

@@ -2172,6 +2173,7 @@ sub process_body($$) {
$prototype = "";
$state = STATE_PROTO;
$brcount = 0;
+ $new_start_line = $. + 1;
} elsif (/$doc_content/) {
if ($1 eq "") {
if ($section eq $section_context) {
--
2.26.2