Skip to contentSkip to conversation

fix -Werror issues

PATCH Superseded Mauro Carvalho Chehab 2 participants 7 messages Jan 12 Documentation

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v2 cover fix -Werror issues

Hi Jon,

As pointed by Jani, and previously by Randy, several warnings are currently not considered as errors. The issue is related to changeset 469c1c9eb6c9 ("kernel-doc: Issue warnings that were silently discarded"), which was using directly a low-level interface.

Patch 1 fix that.
Patch 2 fixes a related issue: when there are more than 255 errors, the return code with -Werror can be 0 even on errors, because of glibc behavior: programs can only use 8 bits for error codes.

Patches 3 and 4 are not directly related, and touches only on comments inside python-doc.py script itself:

- patch 3 is just a coding style change to match the comment style we agreed;

- patch 4 fixes some English issues on comments. The issues were pointed by LLM, which was used as any other spelling
tool: I picked just the relevant changes, ignoring the ones that were false positives. I also didn't agree with one of the changes, replacing it by something else.

I wrote it more as an experiment about how to properly use LLM. IMO, it could be useful to use LLM to review spelling on docs, provided that the one using the tool will filter out LLM-generated trash - just like one does when using any other spelling tool. Yet, based on Jani feedback, extra care is needed with regards to LLM abuse of UTF-8 chars.

---

v2:
- on patch 2, I changed the -Werror return code to "3". This

    way, it is easier for a script to identify what happened;

- removed UTF-8 unbreakable whitespaces from patch 4. Heh, it seems that LLM-produced stuff can suffer with unwanted UTF-8 chars... On one of the strings it replaced 0x20 with 0xa0...

Mauro Carvalho Chehab (4):
scripts/kernel-doc: fix logic to handle unissued warnings scripts/kernel-doc: avoid error_count overflows scripts/kernel-doc: ensure that comments are using our coding style scripts/kernel-doc: some fixes to kernel-doc comments

 scripts/kernel-doc.py                | 66 ++++++++++++++++++++--------
 tools/lib/python/kdoc/kdoc_parser.py |  6 ++-
 2 files changed, 52 insertions(+), 20 deletions(-)
Signature · 1 line
2.52.0
#1 lore raw

PATCH v2 1/4 scripts/kernel-doc: fix logic to handle unissued warnings

Changeset 469c1c9eb6c9 ("kernel-doc: Issue warnings that were silently discarded") didn't properly addressed the missing messages behavior, as
it was calling directly python logger low-level function,
instead of using the expected method to emit warnings.

Basically, there are two methods to log messages:

- self.config.log.warning() - This is the raw level to emit a warning. It just writes the a message at stderr, via python logging, as it is initialized as:

self.config.log = logging.getLogger("kernel-doc")

- self.config.warning() - This is where we actually consider a message as a warning, properly incrementing error count.

Due to that, several parsing error messages are internally considered as success, causing -Werror to not work on such messages.

While here, ensure that the last ignored entry will also be handled by adding an extra check at the end of the parse handler.

Fixes 469c1c9eb6c9 ("kernel-doc: Issue warnings that were silently discarded")
---
 tools/lib/python/kdoc/kdoc_parser.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
tools/lib/python/kdoc/kdoc_parser.py +5 -1
index a9a37519145d..aed07fdaa561 100644
@@ -459,7 +459,7 @@ class KernelDoc:
         #
         if self.entry and self.entry not in self.entries:
             for log_msg in self.entry.warnings:
-                self.config.log.warning(log_msg)
+                self.config.warning(log_msg)
 
         self.entry = KernelEntry(self.config, self.fname, ln)
 
@@ -1741,6 +1741,10 @@ class KernelDoc:
                         # Hand this line to the appropriate state handler
                         self.state_actions[self.state](self, ln, line)
 
+            if self.entry and self.entry not in self.entries:
+                for log_msg in self.entry.warnings:
+                    self.config.warning(log_msg)
+
         except OSError:
             self.config.log.error(f"Error: Cannot open file {self.fname}")
 
Signature · 1 line
2.52.0
#2 lore raw

PATCH v2 2/4 scripts/kernel-doc: avoid error_count overflows

In reply to Mauro Carvalho Chehab

The glibc library limits the return code to 8 bits. We need to stick to this limit when using sys.exit(error_count).

---
 scripts/kernel-doc.py | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)
scripts/kernel-doc.py +19 -7
index 7a1eaf986bcd..5d2f29e90ebe 100755
@@ -116,6 +116,8 @@ SRC_DIR = os.path.dirname(os.path.realpath(__file__))
 
 sys.path.insert(0, os.path.join(SRC_DIR, LIB_DIR))
 
+WERROR_RETURN_CODE = 3
+
 DESC = """
 Read C language source or header FILEs, extract embedded documentation comments,
 and print formatted documentation to standard output.
@@ -176,7 +178,21 @@ class MsgFormatter(logging.Formatter):
         return logging.Formatter.format(self, record)
 
 def main():
-    """Main program"""
+    """
+    Main program
+    By default, the return value is:
+
+    - 0: parsing warnings or Python version is not compatible with
+      kernel-doc. The rationale for the latter is to not break Linux
+      compilation on such cases;
+
+    - 1: an abnormal condition happened;
+
+    - 2: arparse issued an error;
+
+    - 3: -Werror is used, and one or more unfiltered parse warnings
+         happened.
+    """
 
     parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
                                      description=DESC)
@@ -323,16 +339,12 @@ def main():
 
     if args.werror:
         print("%s warnings as errors" % error_count)    # pylint: disable=C0209
-        sys.exit(error_count)
+        sys.exit(WERROR_RETURN_CODE)
 
     if args.verbose:
         print("%s errors" % error_count)                # pylint: disable=C0209
 
-    if args.none:
-        sys.exit(0)
-
-    sys.exit(error_count)
-
+    sys.exit(0)
 
 # Call main method
 if __name__ == "__main__":
Signature · 1 line
2.52.0
#3 lore raw

PATCH v2 3/4 scripts/kernel-doc: ensure that comments are using our coding style

In reply to Mauro Carvalho Chehab

Along kernel-doc libs, we opted to have all comments starting/ending with a blank comment line. Use the same style here.

---
 scripts/kernel-doc.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
scripts/kernel-doc.py +16 -0
index 5d2f29e90ebe..7ccee4626478 100755
@@ -197,7 +197,9 @@ def main():
     parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
                                      description=DESC)
 
+    #
     # Normal arguments
+    #
 
     parser.add_argument("-v", "-verbose", "--verbose", action="store_true",
                         help="Verbose output, more warnings and other information.")
@@ -213,7 +215,9 @@ def main():
                         action="store_true",
                         help="Enable line number output (only in ReST mode)")
 
+    #
     # Arguments to control the warning behavior
+    #
 
     parser.add_argument("-Wreturn", "--wreturn", action="store_true",
                         help="Warns about the lack of a return markup on functions.")
@@ -235,7 +239,9 @@ def main():
     parser.add_argument("-export-file", "--export-file", action='append',
                         help=EXPORT_FILE_DESC)
 
+    #
     # Output format mutually-exclusive group
+    #
 
     out_group = parser.add_argument_group("Output format selection (mutually exclusive)")
 
@@ -248,7 +254,9 @@ def main():
     out_fmt.add_argument("-N", "-none", "--none", action="store_true",
                          help="Do not output documentation, only warnings.")
 
+    #
     # Output selection mutually-exclusive group
+    #
 
     sel_group = parser.add_argument_group("Output selection (mutually exclusive)")
     sel_mut = sel_group.add_mutually_exclusive_group()
@@ -262,7 +270,9 @@ def main():
     sel_mut.add_argument("-s", "-function", "--symbol", action='append',
                          help=FUNCTION_DESC)
 
+    #
     # Those are valid for all 3 types of filter
+    #
     parser.add_argument("-n", "-nosymbol", "--nosymbol", action='append',
                         help=NOSYMBOL_DESC)
 
@@ -295,9 +305,11 @@ def main():
 
     python_ver = sys.version_info[:2]
     if python_ver < (3,6):
+        #
         # Depending on Kernel configuration, kernel-doc --none is called at
         # build time. As we don't want to break compilation due to the
         # usage of an old Python version, return 0 here.
+        #
         if args.none:
             logger.error("Python 3.6 or later is required by kernel-doc. skipping checks")
             sys.exit(0)
@@ -307,7 +319,9 @@ def main():
     if python_ver < (3,7):
         logger.warning("Python 3.7 or later is required for correct results")
 
+    #
     # Import kernel-doc libraries only after checking Python version
+    #
     from kdoc.kdoc_files import KernelFiles             # pylint: disable=C0415
     from kdoc.kdoc_output import RestFormat, ManFormat  # pylint: disable=C0415
 
@@ -346,6 +360,8 @@ def main():
 
     sys.exit(0)
 
+#
 # Call main method
+#
 if __name__ == "__main__":
     main()
Signature · 1 line
2.52.0
maintainer
#4 lore raw

Re: [PATCH v2 3/4] scripts/kernel-doc: ensure that comments are using our coding style

Quoted 13 lines · Mauro Carvalho Chehab

Along kernel-doc libs, we opted to have all comments starting/ending with a blank comment line. Use the same style here.

---
 scripts/kernel-doc.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
scripts/kernel-doc.py +0 -0
index 5d2f29e90ebe..7ccee4626478 100755

scripts/kernel-doc.py def main(): · line 205

Quoted 9 lines
scripts/kernel-doc.py +2 -0
@@ -197,7 +197,9 @@ def main():
     parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
                                      description=DESC)
 
+    #
     # Normal arguments
+    #
 
     parser.add_argument("-v", "-verbose", "--verbose", action="store_true",
                         help="Verbose output, more warnings and other information.")

[nit] I approve of this kind of change, but I would get rid of the extra blank lines, just like we do with C code.

(I wouldn't redo the series just for this).

Thanks,

jon

#5 lore raw

Re: [PATCH v2 3/4] scripts/kernel-doc: ensure that comments are using our coding style

Quoted 22 lines · Jonathan Corbet
Quoted 20 lines · Mauro Carvalho Chehab

Along kernel-doc libs, we opted to have all comments starting/ending with a blank comment line. Use the same style here.

---
 scripts/kernel-doc.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
scripts/kernel-doc.py +2 -0
index 5d2f29e90ebe..7ccee4626478 100755
@@ -197,7 +197,9 @@ def main():
     parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
                                      description=DESC)
 
+    #
     # Normal arguments
+    #
 
Quoted 5 lines

scripts/kernel-doc.py def main(): · line 205

Quoted 2 lines
scripts/kernel-doc.py +0 -0
     parser.add_argument("-v", "-verbose", "--verbose", action="store_true",
                         help="Verbose output, more warnings and other information.")

[nit] I approve of this kind of change, but I would get rid of the extra blank lines, just like we do with C code.

Ok. FYI, this is mostly to preserve the same coding style everywhere, and we did a similar change at kdoc libs. At the initial versions of patch 2, I wrote a new comment about why we needed to avoid error code > 255.

At v2, we're using a different approach, so no new comments are needed.

Quoted 1 line

(I wouldn't redo the series just for this).

Patch 4 depends on it, so what I can do - assuming that v2 doesn't need rebase - is to send you a new patch to drop it extra blank lines. Or, if this series needs another rebase, I'll fold such changes on it for the next version.

Quoted 4 lines

Thanks,

jon

Signature · 2 lines
Thanks,
Mauro
#6 lore raw

PATCH v2 4/4 scripts/kernel-doc: some fixes to kernel-doc comments

In reply to Mauro Carvalho Chehab

There are some typos and English errors at the kernel-doc.py comments.

Locate them with the help of LLM (gpt-oss 14B), locally excecuted with this prompt:

review English grammar andsyntax at the comments on the code below:
<cat scripts/kernel-doc.py>

Not all results are flowers, although it caught several minor issues there. Add the pertinent fixes, discarding the bad ones.

---
 scripts/kernel-doc.py | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)
scripts/kernel-doc.py +12 -12
index 7ccee4626478..28ec5500f664 100755
@@ -9,10 +9,10 @@
 #       The rationale is that it shall fail gracefully during Kernel
 #       compilation with older Kernel versions. Due to that:
 #       - encoding line is needed here;
-#       - no f-strings can be used on this file.
-#       - the libraries that require newer versions can only be included
-#         after Python version is checked.
-
+#       - f-strings cannot be used in this file.
+#       - libraries that require newer versions can only be included
+#         after the Python version has been checked.
+#
 # Converted from the kernel-doc script originally written in Perl
 # under GPLv2, copyrighted since 1998 by the following authors:
 #
@@ -134,13 +134,13 @@ May be used multiple times.
 """
 
 EXPORT_DESC = """
-Only output documentation for the symbols that have been
+Only output documentation for symbols that have been
 exported using EXPORT_SYMBOL() and related macros in any input
 FILE or -export-file FILE.
 """
 
 INTERNAL_DESC = """
-Only output documentation for the symbols that have NOT been
+Only output documentation for symbols that have NOT been
 exported using EXPORT_SYMBOL() and related macros in any input
 FILE or -export-file FILE.
 """
@@ -163,7 +163,7 @@ Header and C source files to be parsed.
 """
 
 WARN_CONTENTS_BEFORE_SECTIONS_DESC = """
-Warns if there are contents before sections (deprecated).
+Warn if there are contents before sections (deprecated).
 
 This option is kept just for backward-compatibility, but it does nothing,
 neither here nor at the original Perl script.
@@ -171,7 +171,7 @@ neither here nor at the original Perl script.
 
 
 class MsgFormatter(logging.Formatter):
-    """Helper class to format warnings on a similar way to kernel-doc.pl"""
+    """Helper class to format warnings in a similar way to kernel-doc.pl."""
 
     def format(self, record):
         record.levelname = record.levelname.capitalize()
@@ -277,7 +277,7 @@ def main():
                         help=NOSYMBOL_DESC)
 
     parser.add_argument("-D", "-no-doc-sections", "--no-doc-sections",
-                        action='store_true', help="Don't outputt DOC sections")
+                        action='store_true', help="Don't output DOC sections")
 
     parser.add_argument("files", metavar="FILE",
                         nargs="+", help=FILES_DESC)
@@ -306,12 +306,12 @@ def main():
     python_ver = sys.version_info[:2]
     if python_ver < (3,6):
         #
-        # Depending on Kernel configuration, kernel-doc --none is called at
+        # Depending on the Kernel configuration, kernel-doc --none is called at
         # build time. As we don't want to break compilation due to the
         # usage of an old Python version, return 0 here.
         #
         if args.none:
-            logger.error("Python 3.6 or later is required by kernel-doc. skipping checks")
+            logger.error("Python 3.6 or later is required by kernel-doc. Skipping checks")
             sys.exit(0)
 
         sys.exit("Python 3.6 or later is required by kernel-doc. Aborting.")
@@ -320,7 +320,7 @@ def main():
         logger.warning("Python 3.7 or later is required for correct results")
 
     #
-    # Import kernel-doc libraries only after checking Python version
+    # Import kernel-doc libraries only after checking the Python version
     #
     from kdoc.kdoc_files import KernelFiles             # pylint: disable=C0415
     from kdoc.kdoc_output import RestFormat, ManFormat  # pylint: disable=C0415
Signature · 1 line
2.52.0