* [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/, ...
@ 2023-09-23 15:10 Arthur Zamarin
0 siblings, 0 replies; 2+ messages in thread
From: Arthur Zamarin @ 2023-09-23 15:10 UTC (permalink / raw
To: gentoo-commits
commit: c46c56e0a28742e6a530503ea839c7a4546e3e16
Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 23 11:31:36 2023 +0000
Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Sat Sep 23 11:31:36 2023 +0000
URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=c46c56e0
SelfAssignment: check for global scope self assignments
Resolves: https://github.com/pkgcore/pkgcheck/issues/626
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>
src/pkgcheck/checks/codingstyle.py | 29 +++++++++++++++++-----
.../MetadataVarCheck/SelfAssignment/expected.json | 5 ++++
.../SelfAssignment/SelfAssignment-0.ebuild | 21 ++++++++++++++++
3 files changed, 49 insertions(+), 6 deletions(-)
diff --git a/src/pkgcheck/checks/codingstyle.py b/src/pkgcheck/checks/codingstyle.py
index 6f1e3b7f..ad75436b 100644
--- a/src/pkgcheck/checks/codingstyle.py
+++ b/src/pkgcheck/checks/codingstyle.py
@@ -555,6 +555,14 @@ class EmptyGlobalAssignment(results.LineResult, results.Style):
return f"line {self.lineno}: empty global assignment: {self.line}"
+class SelfAssignment(results.LineResult, results.Warning):
+ """Global scope useless empty assignment."""
+
+ @property
+ def desc(self):
+ return f"line {self.lineno}: self assignment: {self.line}"
+
+
def verify_vars(*variables):
"""Decorator to register raw variable verification methods."""
@@ -583,6 +591,7 @@ class MetadataVarCheck(Check):
ReferenceInMetadataVar,
MultipleKeywordsLines,
EmptyGlobalAssignment,
+ SelfAssignment,
}
)
@@ -658,19 +667,27 @@ 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")
+ value_node = node.child_by_field_name("value")
+ value_str = pkg.node_str(value_node).strip("\"'") if value_node else ""
if name in pkg.eapi.eclass_keys:
- if not value or not pkg.node_str(value).strip("\"'"):
+ if not value_str:
lineno, _ = node.start_point
yield EmptyGlobalAssignment(line=pkg.node_str(node), lineno=lineno + 1, pkg=pkg)
+ elif pkg.node_str(value_node.prev_sibling) == "=":
+ for var_node, _ in bash.var_query.captures(value_node):
+ if (
+ pkg.node_str(var_node) == name
+ and pkg.node_str(var_node.parent) == value_str
+ and var_node.next_named_sibling is None
+ ):
+ node_str = pkg.node_str(node).replace("\n", "").replace("\t", " ")
+ lineno, _ = node.start_point
+ yield SelfAssignment(line=node_str, lineno=lineno + 1, pkg=pkg)
if name in self.known_variables:
- # RHS value node should be last
- val_node = node.children[-1]
- val_str = pkg.node_str(val_node)
if name == "KEYWORDS":
keywords_lines.add(node.start_point[0] + 1)
keywords_lines.add(node.end_point[0] + 1)
- yield from self.known_variables[name](self, name, val_node, val_str, pkg)
+ yield from self.known_variables[name](self, name, value_node, value_str, pkg)
if len(keywords_lines) > 1:
yield MultipleKeywordsLines(sorted(keywords_lines), pkg=pkg)
diff --git a/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json b/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json
new file mode 100644
index 00000000..314daa7f
--- /dev/null
+++ b/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json
@@ -0,0 +1,5 @@
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\"${RDEPEND}\"", "lineno": 6}
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\"$RDEPEND\"", "lineno": 7}
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=${RDEPEND}", "lineno": 8}
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=$RDEPEND", "lineno": 9}
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\" ${RDEPEND}\"", "lineno": 12}
diff --git a/testdata/repos/standalone/MetadataVarCheck/SelfAssignment/SelfAssignment-0.ebuild b/testdata/repos/standalone/MetadataVarCheck/SelfAssignment/SelfAssignment-0.ebuild
new file mode 100644
index 00000000..1abcf8b0
--- /dev/null
+++ b/testdata/repos/standalone/MetadataVarCheck/SelfAssignment/SelfAssignment-0.ebuild
@@ -0,0 +1,21 @@
+DESCRIPTION="Ebuild with various self assignments"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+
+RDEPEND="${RDEPEND}" # FAIL
+RDEPEND="$RDEPEND" # FAIL
+RDEPEND=${RDEPEND} # FAIL
+RDEPEND=$RDEPEND # FAIL
+RDEPEND="${RDEPEND}
+" # FAIL
+RDEPEND="
+ ${RDEPEND}" # FAIL
+RDEPEND="
+ ${RDEPEND}
+" # FAIL
+
+RDEPEND+=" ${RDEPEND}" # OK (+=)
+RDEPEND="${RDEPEND} stub/stub1" # OK (something else)
+RDEPEND="stub/stub1 ${RDEPEND}" # OK (something else)
+RDEPEND="${RDEPEND:=stub/stub1}" # OK (:=)
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/, ...
@ 2023-10-02 18:39 Arthur Zamarin
0 siblings, 0 replies; 2+ messages in thread
From: Arthur Zamarin @ 2023-10-02 18:39 UTC (permalink / raw
To: gentoo-commits
commit: 9e7637d22b0ddb1b701073dae2a7a47c0d6ec74b
Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 2 17:52:36 2023 +0000
Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Mon Oct 2 18:38:53 2023 +0000
URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=9e7637d2
SelfAssignment: fix with new tree-sitter-bash
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>
src/pkgcheck/checks/codingstyle.py | 7 +++++--
.../repos/standalone/MetadataVarCheck/SelfAssignment/expected.json | 2 ++
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/pkgcheck/checks/codingstyle.py b/src/pkgcheck/checks/codingstyle.py
index 317841bc..20d668f8 100644
--- a/src/pkgcheck/checks/codingstyle.py
+++ b/src/pkgcheck/checks/codingstyle.py
@@ -682,12 +682,15 @@ class MetadataVarCheck(Check):
for static_str, replacement in static_urls.items():
yield StaticSrcUri(static_str, replacement=replacement, pkg=pkg)
+ def canonicalize_assign(self, value: str):
+ return value.strip("\"'").replace("\n", "").replace("\t", " ")
+
def feed(self, pkg):
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 = node.child_by_field_name("value")
- value_str = pkg.node_str(value_node).strip("\"'") if value_node else ""
+ value_str = self.canonicalize_assign(pkg.node_str(value_node)) if value_node else ""
if name in pkg.eapi.eclass_keys:
if not value_str:
lineno, _ = node.start_point
@@ -696,7 +699,7 @@ class MetadataVarCheck(Check):
for var_node, _ in bash.var_query.captures(value_node):
if (
pkg.node_str(var_node) == name
- and pkg.node_str(var_node.parent) == value_str
+ and self.canonicalize_assign(pkg.node_str(var_node.parent)) == value_str
and var_node.next_named_sibling is None
):
node_str = pkg.node_str(node).replace("\n", "").replace("\t", " ")
diff --git a/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json b/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json
index 314daa7f..e7717502 100644
--- a/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json
+++ b/testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/expected.json
@@ -2,4 +2,6 @@
{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\"$RDEPEND\"", "lineno": 7}
{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=${RDEPEND}", "lineno": 8}
{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=$RDEPEND", "lineno": 9}
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\"${RDEPEND}\"", "lineno": 10}
{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\" ${RDEPEND}\"", "lineno": 12}
+{"__class__": "SelfAssignment", "category": "MetadataVarCheck", "package": "SelfAssignment", "version": "0", "line": "RDEPEND=\" ${RDEPEND}\"", "lineno": 14}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-10-02 18:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-02 18:39 [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/standalone/MetadataVarCheck/SelfAssignment/, Arthur Zamarin
-- strict thread matches above, loose matches on Subject: below --
2023-09-23 15:10 Arthur Zamarin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox