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)