All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ricardo Martincoski <ricardo.martincoski@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 3/9] check-package: check whitespace and empty lines
Date: Sat, 31 Dec 2016 01:21:04 -0200	[thread overview]
Message-ID: <20161231032110.11573-4-ricardo.martincoski@gmail.com> (raw)
In-Reply-To: <20161231032110.11573-1-ricardo.martincoski@gmail.com>

Create 3 new check functions to warn when:
- there are consecutive empty lines in the file, see [1];
- the last line of the file is empty, see [2];
- there are lines with trailing whitespace, see [3].

Apply these functions to Config.in, .mk and .hash, but not for .patch
files since they can contain any of these and still be valid.

[1] http://patchwork.ozlabs.org/patch/682660/
[2] http://patchwork.ozlabs.org/patch/643288/
[3] http://patchwork.ozlabs.org/patch/398984/

Signed-off-by: Ricardo Martincoski <ricardo.martincoski@gmail.com>
---

Notes:
    $ time support/scripts/check-package $(find package -type f) >/dev/null 2>/dev/null
    
    real	0m0.787s
    user	0m0.772s
    sys	0m0.012s
    
    CHECK_CONSECUTIVE_EMPTY_LINES:
     support/scripts/check-package --include-only check_consecutive_empty_lines \
     $(find package -type f) 2>/dev/null | wc -l
      22
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_consecutive_empty_lines -vv package/*/*)
      package/package1/Config.in:22: consecutive empty lines
      package/package1/package1.hash:8: consecutive empty lines
      package/package1/package1.mk:23: consecutive empty lines
      159 lines processed
      3 warnings generated
    
    CHECK_EMPTY_LAST_LINE:
     support/scripts/check-package --include-only check_empty_last_line \
     $(find package -type f) 2>/dev/null | wc -l
      17
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_empty_last_line -vv package/*/*)
      package/package1/package1.hash:8: empty line at end of file
      package/package1/package1.mk:48: empty line at end of file
      159 lines processed
      2 warnings generated
    
    CHECK_TRAILING_SPACE:
     support/scripts/check-package --include-only check_trailing_space \
     $(find package -type f) 2>/dev/null | wc -l
      3
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_trailing_space -vv package/*/*)
      package/package1/package1.hash:2: line contains trailing whitespace
      sha256 1234567890123456789012345678901234567890123456789012345678901234 package1-1.0.tar.gz
      package/package1/package1.hash:7: line contains trailing whitespace
    
      package/package1/package1.mk:7: line contains trailing whitespace
      PACKAGE1_SITE = https://localhost
      package/package1/package1.mk:12: line contains trailing whitespace
      PACKAGE1_INSTALL_STAGING=NO
      package/package1/package1.mk:13: line contains trailing whitespace
      PACKAGE1_INSTALL_TARGET = YES< tab  >
      package/package1/package1.mk:48: line contains trailing whitespace
      < tab  >
      159 lines processed
      6 warnings generated

 support/scripts/checkpackagelib.py        | 38 +++++++++++++++++++++++++++++++
 support/scripts/checkpackagelib_config.py |  3 +++
 support/scripts/checkpackagelib_hash.py   |  3 +++
 support/scripts/checkpackagelib_mk.py     |  3 +++
 4 files changed, 47 insertions(+)

diff --git a/support/scripts/checkpackagelib.py b/support/scripts/checkpackagelib.py
index 987399954..787b22551 100644
--- a/support/scripts/checkpackagelib.py
+++ b/support/scripts/checkpackagelib.py
@@ -1,6 +1,33 @@
 # See support/scripts/check-package.txt before editing this file.
 
 
+def check_consecutive_empty_lines(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start:
+        check_consecutive_empty_lines.lastline = "non empty"
+        return
+    if end:
+        return
+    if text.strip() == "" == check_consecutive_empty_lines.lastline.strip():
+        return ["{}:{}: consecutive empty lines".format(fname, lineno)]
+    check_consecutive_empty_lines.lastline = text
+
+
+def check_empty_last_line(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start:
+        check_empty_last_line.lastlineno = 0
+        check_empty_last_line.lastline = "non empty"
+        return
+    if end:
+        if check_empty_last_line.lastline.strip() == "":
+            return ["{}:{}: empty line at end of file"
+                    .format(fname, check_empty_last_line.lastlineno)]
+        return
+    check_empty_last_line.lastlineno = lineno
+    check_empty_last_line.lastline = text
+
+
 def check_newline_at_eof(
         fname, args, lineno=0, text=None, start=False, end=False):
     if start:
@@ -16,3 +43,14 @@ def check_newline_at_eof(
         return
     check_newline_at_eof.lastlineno = lineno
     check_newline_at_eof.lastline = text
+
+
+def check_trailing_space(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start or end:
+        return
+    line = text.rstrip("\r\n")
+    if line != line.rstrip():
+        return ["{}:{}: line contains trailing whitespace"
+                .format(fname, lineno),
+                text]
diff --git a/support/scripts/checkpackagelib_config.py b/support/scripts/checkpackagelib_config.py
index 2660cccd7..aec8b3ea4 100644
--- a/support/scripts/checkpackagelib_config.py
+++ b/support/scripts/checkpackagelib_config.py
@@ -4,4 +4,7 @@
 # checked by running "make menuconfig".
 
 # Notice: ignore 'imported but unused' from pyflakes for check functions.
+from checkpackagelib import check_consecutive_empty_lines
+from checkpackagelib import check_empty_last_line
 from checkpackagelib import check_newline_at_eof
+from checkpackagelib import check_trailing_space
diff --git a/support/scripts/checkpackagelib_hash.py b/support/scripts/checkpackagelib_hash.py
index 590d5a7c4..d095f9255 100644
--- a/support/scripts/checkpackagelib_hash.py
+++ b/support/scripts/checkpackagelib_hash.py
@@ -4,4 +4,7 @@
 # "make package-dirclean package-source".
 
 # Notice: ignore 'imported but unused' from pyflakes for check functions.
+from checkpackagelib import check_consecutive_empty_lines
+from checkpackagelib import check_empty_last_line
 from checkpackagelib import check_newline_at_eof
+from checkpackagelib import check_trailing_space
diff --git a/support/scripts/checkpackagelib_mk.py b/support/scripts/checkpackagelib_mk.py
index ad7362335..1ff0973dd 100644
--- a/support/scripts/checkpackagelib_mk.py
+++ b/support/scripts/checkpackagelib_mk.py
@@ -5,4 +5,7 @@
 # packages enabled.
 
 # Notice: ignore 'imported but unused' from pyflakes for check functions.
+from checkpackagelib import check_consecutive_empty_lines
+from checkpackagelib import check_empty_last_line
 from checkpackagelib import check_newline_at_eof
+from checkpackagelib import check_trailing_space
-- 
2.11.0

  parent reply	other threads:[~2016-12-31  3:21 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-31  3:21 [Buildroot] [PATCH 0/9] A checkpackage script that verifies a package coding style Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 1/9] support/scripts/check-package: example Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 2/9] support/scripts/check-package: new script Ricardo Martincoski
2017-01-24 21:14   ` Thomas De Schampheleire
2017-02-06 18:53     ` Thomas De Schampheleire
2017-02-07  0:17       ` Ricardo Martincoski
2017-02-19 23:13     ` Ricardo Martincoski
2016-12-31  3:21 ` Ricardo Martincoski [this message]
2016-12-31  3:21 ` [Buildroot] [PATCH 4/9] check-package: check *.hash files Ricardo Martincoski
2017-01-24 21:18   ` Thomas De Schampheleire
2017-02-19 23:16     ` Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 5/9] check-package: check *.patch files Ricardo Martincoski
2017-01-24 21:21   ` Thomas De Schampheleire
2017-02-07  9:58     ` Thomas Petazzoni
2017-02-19 23:41       ` Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 6/9] check-package: check *.mk files Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 7/9] docs/manual: size of tab in package description Ricardo Martincoski
2017-01-21 16:58   ` Romain Naour
2017-02-07  1:10     ` Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 8/9] check-package: check Config.in.* files Ricardo Martincoski
2016-12-31  3:21 ` [Buildroot] [PATCH 9/9] check-package: check *.mk for typo in variable Ricardo Martincoski
2017-01-21 17:19   ` Romain Naour
2017-02-07  0:33     ` Ricardo Martincoski
2017-02-07  9:03   ` Peter Korsgaard
2017-01-21 17:56 ` [Buildroot] [PATCH 0/9] A checkpackage script that verifies a package coding style Romain Naour
2017-02-07  0:52   ` Ricardo Martincoski
2017-02-19 22:17 ` [Buildroot] [PATCH v2 " Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 1/9] support/scripts/check-package: example Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 2/9] support/scripts/check-package: new script Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 3/9] check-package: check whitespace and empty lines Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 4/9] check-package: check *.hash files Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 5/9] check-package: check *.patch files Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 6/9] check-package: check *.mk files Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 7/9] docs/manual: size of tab in package description Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 8/9] check-package: check Config.* files Ricardo Martincoski
2017-02-19 22:17   ` [Buildroot] [PATCH v2 9/9] check-package: check *.mk for typo in variable Ricardo Martincoski
2017-04-08 14:21   ` [Buildroot] [PATCH v2 0/9] A checkpackage script that verifies a package coding style Thomas Petazzoni
2017-04-11 23:03     ` Ricardo Martincoski
2017-04-12  7:49       ` Thomas Petazzoni
2017-04-13  3:03         ` Ricardo Martincoski
2017-04-13  7:20           ` Thomas Petazzoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161231032110.11573-4-ricardo.martincoski@gmail.com \
    --to=ricardo.martincoski@gmail.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.