public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/, ...
@ 2023-06-22 18:58 Arthur Zamarin
  0 siblings, 0 replies; only message in thread
From: Arthur Zamarin @ 2023-06-22 18:58 UTC (permalink / raw
  To: gentoo-commits

commit:     32b467d9af17e8bd9843e87488f74eba0df748b3
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 21 17:57:57 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Wed Jun 21 18:38:40 2023 +0000
URL:        https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=32b467d9

RustCheck: check for suboptimal cargo_crate_uris call

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

 src/pkgcheck/checks/rust.py                        | 36 ++++++++++++++++++++++
 .../SuboptimalCratesURICall/expected.json          |  2 ++
 .../RustCheck/SuboptimalCratesURICall/fix.patch    | 18 +++++++++++
 .../SuboptimalCratesURICall-0.ebuild               | 13 ++++++++
 .../SuboptimalCratesURICall-1.ebuild               | 13 ++++++++
 .../SuboptimalCratesURICall-2.ebuild               | 13 ++++++++
 testdata/repos/standalone/eclass/cargo.eclass      |  4 +++
 7 files changed, 99 insertions(+)

diff --git a/src/pkgcheck/checks/rust.py b/src/pkgcheck/checks/rust.py
index 75197e56..1a5e6770 100644
--- a/src/pkgcheck/checks/rust.py
+++ b/src/pkgcheck/checks/rust.py
@@ -17,6 +17,20 @@ class SuboptimalCratesSeparator(results.LineResult, results.Warning):
         return f"line: {self.lineno}: using - as name-version separator in CRATES is suboptimal, use name@version instead"
 
 
+class SuboptimalCratesURICall(results.LineResult, results.Warning):
+    """Calling ``cargo_crate_uris`` with ``CRATES`` is suboptimal, use
+    ``${CARGO_CRATE_URIS}``.
+
+    Calls to ``$(cargo_crate_uris)`` and ``$(cargo_crate_uris ${CRATES})`` are
+    suboptimal, and can be replaces with ``${CARGO_CRATE_URIS}`` which is
+    pre-computed, faster and doesn't require sub-shell in global-scope.
+    """
+
+    @property
+    def desc(self):
+        return f"line: {self.lineno}: calling {self.line!r} is suboptimal, use '${{CARGO_CRATE_URIS}}' for global CRATES instead"
+
+
 class RustCheck(Check):
     """Checks for rust related issues."""
 
@@ -24,6 +38,7 @@ class RustCheck(Check):
     known_results = frozenset(
         {
             SuboptimalCratesSeparator,
+            SuboptimalCratesURICall,
         }
     )
 
@@ -44,7 +59,28 @@ class RustCheck(Check):
                             )
                             return
 
+    def _verify_cargo_crate_uris(self, pkg: bash.ParseTree):
+        for node, _ in bash.cmd_query.captures(pkg.tree.root_node):
+            call_name = pkg.node_str(node.child_by_field_name("name"))
+            if call_name == "cargo_crate_uris":
+                row, _ = node.start_point
+                line = pkg.node_str(node.parent)
+                if node.child_count == 1 or (
+                    node.child_count == 2
+                    and any(
+                        pkg.node_str(var_node) == "CRATES"
+                        for var_node, _ in bash.var_query.captures(node.children[1])
+                    )
+                ):
+                    yield SuboptimalCratesURICall(
+                        lineno=row + 1,
+                        line=line,
+                        pkg=pkg,
+                    )
+                    break
+
     def feed(self, pkg: bash.ParseTree):
         if "cargo" not in pkg.inherited:
             return
         yield from self._verify_crates(pkg)
+        yield from self._verify_cargo_crate_uris(pkg)

diff --git a/testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/expected.json b/testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/expected.json
new file mode 100644
index 00000000..a5b21618
--- /dev/null
+++ b/testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/expected.json
@@ -0,0 +1,2 @@
+{"__class__": "SuboptimalCratesURICall", "category": "RustCheck", "package": "SuboptimalCratesURICall", "version": "0", "line": "$(cargo_crate_uris)", "lineno": 13}
+{"__class__": "SuboptimalCratesURICall", "category": "RustCheck", "package": "SuboptimalCratesURICall", "version": "1", "line": "$(cargo_crate_uris ${CRATES})", "lineno": 13}

diff --git a/testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/fix.patch b/testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/fix.patch
new file mode 100644
index 00000000..6e200a51
--- /dev/null
+++ b/testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/fix.patch
@@ -0,0 +1,18 @@
+diff -Naur standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild fixed/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild
+--- standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild
++++ fixed/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild
+@@ -10,4 +10,4 @@ DESCRIPTION="Ebuild with suboptimal cargo_crate_uris"
+ HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+ SLOT="0"
+ LICENSE="BSD"
+-SRC_URI="$(cargo_crate_uris)"
++SRC_URI="${CARGO_CRATE_URIS}"
+diff -Naur standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild fixed/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild
+--- standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild
++++ fixed/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild
+@@ -10,4 +10,4 @@ DESCRIPTION="Ebuild with suboptimal cargo_crate_uris"
+ HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+ SLOT="0"
+ LICENSE="BSD"
+-SRC_URI="$(cargo_crate_uris ${CRATES})"
++SRC_URI="${CARGO_CRATE_URIS}"

diff --git a/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild b/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild
new file mode 100644
index 00000000..8a8b79d0
--- /dev/null
+++ b/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-0.ebuild
@@ -0,0 +1,13 @@
+CRATES="
+	snakeoil@0.10.0
+	pkgcore@0.10.0
+	pkgcheck@0.10.0
+"
+
+inherit cargo
+
+DESCRIPTION="Ebuild with suboptimal cargo_crate_uris"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+SRC_URI="$(cargo_crate_uris)"

diff --git a/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild b/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild
new file mode 100644
index 00000000..1aa95b8f
--- /dev/null
+++ b/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-1.ebuild
@@ -0,0 +1,13 @@
+CRATES="
+	snakeoil@0.10.0
+	pkgcore@0.10.0
+	pkgcheck@0.10.0
+"
+
+inherit cargo
+
+DESCRIPTION="Ebuild with suboptimal cargo_crate_uris"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+SRC_URI="$(cargo_crate_uris ${CRATES})"

diff --git a/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-2.ebuild b/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-2.ebuild
new file mode 100644
index 00000000..72ef8a24
--- /dev/null
+++ b/testdata/repos/standalone/RustCheck/SuboptimalCratesURICall/SuboptimalCratesURICall-2.ebuild
@@ -0,0 +1,13 @@
+CRATES="
+	snakeoil@0.10.0
+	pkgcore@0.10.0
+	pkgcheck@0.10.0
+"
+
+inherit cargo
+
+DESCRIPTION="Ebuild with suboptimal cargo_crate_uris"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+SRC_URI="$(cargo_crate_uris ${CRATES} something)"

diff --git a/testdata/repos/standalone/eclass/cargo.eclass b/testdata/repos/standalone/eclass/cargo.eclass
index f83c98d3..217dc8e8 100644
--- a/testdata/repos/standalone/eclass/cargo.eclass
+++ b/testdata/repos/standalone/eclass/cargo.eclass
@@ -1 +1,5 @@
 # cargo eclass
+
+CARGO_CRATE_URIS=${CRATES}
+
+cargo_crate_uris() { :; }


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2023-06-22 18:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-22 18:58 [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/standalone/RustCheck/SuboptimalCratesURICall/, Arthur Zamarin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox