commit:     fdcf83d0811019e0a465006493fe4acad77043da
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 24 16:39:20 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Mon Apr 24 16:39:20 2023 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=fdcf83d0

MissingEAPIBlankLine: make it optional

Requested by multiple devs, maybe in future we would improve logic, and
un-optional it.

Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcheck/checks/whitespace.py                  | 29 ++++++++++++++++------
 .../MissingEAPIBlankLine/expected.json             |  1 -
 .../WhitespaceCheck/MissingEAPIBlankLine/fix.patch |  9 -------
 .../MissingEAPIBlankLine-0.ebuild                  |  5 ----
 tests/checks/test_whitespace.py                    | 18 ++++++++++++++
 5 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/src/pkgcheck/checks/whitespace.py 
b/src/pkgcheck/checks/whitespace.py
index 31667f9c..a853e0b0 100644
--- a/src/pkgcheck/checks/whitespace.py
+++ b/src/pkgcheck/checks/whitespace.py
@@ -4,7 +4,7 @@ import re
 from typing import NamedTuple
 
 from .. import results, sources
-from . import Check
+from . import Check, OptionalCheck
 
 
 class _Whitespace(results.LinesResult, results.Style):
@@ -131,7 +131,6 @@ class WhitespaceCheck(Check):
             TrailingEmptyLine,
             NoFinalNewline,
             BadWhitespaceCharacter,
-            MissingEAPIBlankLine,
         }
     )
 
@@ -148,14 +147,8 @@ class WhitespaceCheck(Check):
         leading = []
         indent = []
         double_empty = []
-        eapi_lineno = None
 
         for lineno, line in enumerate(pkg.lines, 1):
-            if line.startswith("EAPI="):
-                eapi_lineno = lineno
-            elif eapi_lineno is not None and lineno == eapi_lineno + 1 and 
line != "\n":
-                yield MissingEAPIBlankLine(pkg=pkg)
-
             for match in self.bad_whitespace_regex.finditer(line):
                 yield BadWhitespaceCharacter(
                     repr(match.group("char")),
@@ -191,3 +184,23 @@ class WhitespaceCheck(Check):
         # Dealing with empty ebuilds is just paranoia
         if pkg.lines and not pkg.lines[-1].endswith("\n"):
             yield NoFinalNewline(pkg=pkg)
+
+
+class MissingWhitespaceCheck(OptionalCheck):
+    """Scan ebuild for missing whitespace."""
+
+    _source = sources.EbuildFileRepoSource
+    known_results = frozenset(
+        {
+            MissingEAPIBlankLine,
+        }
+    )
+
+    def feed(self, pkg):
+        eapi_lineno = None
+
+        for lineno, line in enumerate(pkg.lines, 1):
+            if line.startswith("EAPI="):
+                eapi_lineno = lineno
+            elif eapi_lineno is not None and lineno == eapi_lineno + 1 and 
line != "\n":
+                yield MissingEAPIBlankLine(pkg=pkg)

diff --git 
a/testdata/data/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/expected.json
 
b/testdata/data/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/expected.json
deleted file mode 100644
index d0630087..00000000
--- 
a/testdata/data/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/expected.json
+++ /dev/null
@@ -1 +0,0 @@
-{"__class__": "MissingEAPIBlankLine", "category": "WhitespaceCheck", 
"package": "MissingEAPIBlankLine", "version": "0"}

diff --git 
a/testdata/data/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/fix.patch 
b/testdata/data/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/fix.patch
deleted file mode 100644
index e6b838e3..00000000
--- 
a/testdata/data/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/fix.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff -Naur 
standalone/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild 
fixed/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild
---- 
standalone/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild
-+++ fixed/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild
-@@ -1,4 +1,5 @@
- EAPI=7
-+
- DESCRIPTION="Ebuild is missing blank line after EAPI"
- HOMEPAGE="https://github.com/pkgcore/pkgcheck";
- SLOT="0"

diff --git 
a/testdata/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild
 
b/testdata/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild
deleted file mode 100644
index fc5a6781..00000000
--- 
a/testdata/repos/standalone/WhitespaceCheck/MissingEAPIBlankLine/MissingEAPIBlankLine-0.ebuild
+++ /dev/null
@@ -1,5 +0,0 @@
-EAPI=7
-DESCRIPTION="Ebuild is missing blank line after EAPI"
-HOMEPAGE="https://github.com/pkgcore/pkgcheck";
-SLOT="0"
-LICENSE="BSD"

diff --git a/tests/checks/test_whitespace.py b/tests/checks/test_whitespace.py
index f90495b6..e6324d77 100644
--- a/tests/checks/test_whitespace.py
+++ b/tests/checks/test_whitespace.py
@@ -150,3 +150,21 @@ class TestMultipleChecks(WhitespaceCheckTest):
 
         reports = self.assertReports(self.check, fake_pkg)
         assert len(reports) == 4
+
+
+class TestMissingWhitespaceCheck(misc.ReportTestCase):
+    check_kls = whitespace.MissingWhitespaceCheck
+    check = whitespace.MissingWhitespaceCheck(None)
+
+    def test_it(self):
+        fake_src = [
+            "# This is a comment\n",
+            "# This is a comment\n",
+            "# This is a comment, and no blank line before EAPI\n",
+            "EAPI=8\n",
+            "inherit fake\n",  # no blank line after EAPI=
+        ]
+        fake_pkg = misc.FakePkg("dev-util/diffball-0.5", lines=fake_src)
+
+        r = self.assertReport(self.check, fake_pkg)
+        assert isinstance(r, whitespace.MissingEAPIBlankLine)

Reply via email to