scripts: kernel-doc: fix line number handling
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Fri, 9 Oct 2020 08:15:25 +0000 (10:15 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 15 Oct 2020 05:49:37 +0000 (07:49 +0200)
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@kernel.org>
scripts/kernel-doc

index ed32883c322124ecd48f16485ebb4be3c4f012b9..9496abba95383c49931c87ed603b2f704cdd2d74 100755 (executable)
@@ -1705,7 +1705,7 @@ sub dump_function($$) {
     my $file = shift;
     my $noret = 0;
 
-    print_lineno($.);
+    print_lineno($new_start_line);
 
     $prototype =~ s/^static +//;
     $prototype =~ s/^extern +//;
@@ -2033,7 +2033,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;
@@ -2116,6 +2116,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 = "";
     }
 
@@ -2171,6 +2172,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) {