commit:     64ea04886ae7769db53bef175652531af240fb83
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 23 10:35:09 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Sat Sep 23 10:35:09 2023 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=64ea0488

EmptyGlobalAssignment: check for empty global assignments

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

 src/pkgcheck/checks/codingstyle.py                  | 21 ++++++++++++++++++++-
 .../EmptyGlobalAssignment/expected.json             |  3 +++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/pkgcheck/checks/codingstyle.py 
b/src/pkgcheck/checks/codingstyle.py
index 0e2188db..6f1e3b7f 100644
--- a/src/pkgcheck/checks/codingstyle.py
+++ b/src/pkgcheck/checks/codingstyle.py
@@ -547,6 +547,14 @@ class MultipleKeywordsLines(results.LinesResult, 
results.Style):
         return f"KEYWORDS specified {self.lines_str}"
 
 
+class EmptyGlobalAssignment(results.LineResult, results.Style):
+    """Global scope useless empty assignment."""
+
+    @property
+    def desc(self):
+        return f"line {self.lineno}: empty global assignment: {self.line}"
+
+
 def verify_vars(*variables):
     """Decorator to register raw variable verification methods."""
 
@@ -569,7 +577,13 @@ class MetadataVarCheck(Check):
 
     _source = sources.EbuildParseRepoSource
     known_results = frozenset(
-        [HomepageInSrcUri, StaticSrcUri, ReferenceInMetadataVar, 
MultipleKeywordsLines]
+        {
+            HomepageInSrcUri,
+            StaticSrcUri,
+            ReferenceInMetadataVar,
+            MultipleKeywordsLines,
+            EmptyGlobalAssignment,
+        }
     )
 
     # mapping between registered variables and verification methods
@@ -644,6 +658,11 @@ class MetadataVarCheck(Check):
         keywords_lines = set()
         for node in pkg.global_query(bash.var_assign_query):
             name = pkg.node_str(node.child_by_field_name("name"))
+            value = node.child_by_field_name("value")
+            if name in pkg.eapi.eclass_keys:
+                if not value or not pkg.node_str(value).strip("\"'"):
+                    lineno, _ = node.start_point
+                    yield EmptyGlobalAssignment(line=pkg.node_str(node), 
lineno=lineno + 1, pkg=pkg)
             if name in self.known_variables:
                 # RHS value node should be last
                 val_node = node.children[-1]

diff --git 
a/testdata/data/repos/standalone/MetadataVarCheck/EmptyGlobalAssignment/expected.json
 
b/testdata/data/repos/standalone/MetadataVarCheck/EmptyGlobalAssignment/expected.json
new file mode 100644
index 00000000..2e861fc0
--- /dev/null
+++ 
b/testdata/data/repos/standalone/MetadataVarCheck/EmptyGlobalAssignment/expected.json
@@ -0,0 +1,3 @@
+{"__class__": "EmptyGlobalAssignment", "category": "DescriptionCheck", 
"package": "BadDescription", "version": "1", "line": "DESCRIPTION=\"\"", 
"lineno": 1}
+{"__class__": "EmptyGlobalAssignment", "category": "MetadataVarCheck", 
"package": "MultipleKeywordsLines", "version": "0", "line": "KEYWORDS=\"\"", 
"lineno": 8}
+{"__class__": "EmptyGlobalAssignment", "category": "MetadataVarCheck", 
"package": "ReferenceInMetadataVar", "version": "3", "line": "LICENSE=\"\"", 
"lineno": 5}

Reply via email to