commit:     aefdf93fc423a08eb41d09eecb5cd376183e1660
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 22 19:39:42 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Thu Jun 22 19:44:44 2023 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=aefdf93f

MissingInherits: exclude @USER_VARIABLEs

Resolves: https://github.com/pkgcore/pkgcheck/issues/575
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcheck/checks/codingstyle.py                         | 14 +++++++++++++-
 .../InheritsCheck/MissingInherits/MissingInherits-2.ebuild |  2 +-
 testdata/repos/eclass/eclass/stub.eclass                   |  6 ++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/pkgcheck/checks/codingstyle.py 
b/src/pkgcheck/checks/codingstyle.py
index a9eb70fa..1ab82ad9 100644
--- a/src/pkgcheck/checks/codingstyle.py
+++ b/src/pkgcheck/checks/codingstyle.py
@@ -749,6 +749,16 @@ class InheritsCheck(Check):
             for name in eclass_obj.variable_names:
                 self.exported.setdefault(name, set()).add(eclass)
 
+        # collect all @USER_VARIABLEs, which are excluded from MissingInherits
+        self.user_variables = frozenset(
+            {
+                x.name
+                for eclass_obj in self.eclass_cache.values()
+                for x in eclass_obj.variables
+                if x.user_variable
+            }
+        )
+
         # register EAPI-related funcs/cmds to ignore
         self.eapi_funcs = {}
         for eapi in EAPI.known_eapis.values():
@@ -826,7 +836,9 @@ class InheritsCheck(Check):
             if node.parent.type == "unset_command":
                 continue
             if name not in self.eapi_vars[pkg.eapi] | assigned_vars.keys():
-                lineno, colno = node.start_point
+                if name in self.user_variables:
+                    continue
+                lineno, _colno = node.start_point
                 if eclass := self.get_eclass(name, pkg):
                     used[eclass].append((lineno + 1, name, name))
 

diff --git 
a/testdata/repos/eclass/InheritsCheck/MissingInherits/MissingInherits-2.ebuild 
b/testdata/repos/eclass/InheritsCheck/MissingInherits/MissingInherits-2.ebuild
index 9aa0432e..025d284c 100644
--- 
a/testdata/repos/eclass/InheritsCheck/MissingInherits/MissingInherits-2.ebuild
+++ 
b/testdata/repos/eclass/InheritsCheck/MissingInherits/MissingInherits-2.ebuild
@@ -11,5 +11,5 @@ src_prepare() {
 }
 
 inherit_public_func() {
-       echo "inherit_public_func"
+       echo "inherit_public_func" "${LARRY_EASTER_EGG}"
 }

diff --git a/testdata/repos/eclass/eclass/stub.eclass 
b/testdata/repos/eclass/eclass/stub.eclass
index b30f3f62..0fbb17ea 100644
--- a/testdata/repos/eclass/eclass/stub.eclass
+++ b/testdata/repos/eclass/eclass/stub.eclass
@@ -11,3 +11,9 @@ EXPORT_FUNCTIONS src_prepare
 # @DESCRIPTION:
 # Public src_prepare stub function.
 stub_src_prepare() { :; }
+
+# @ECLASS_VARIABLE: LARRY_EASTER_EGG
+# @USER_VARIABLE
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# A special user variable, an easter egg if you can find it.

Reply via email to