Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
bdc96ae
refactor(cargo): patch crates in place; drop the [patch]-redirect bac…
mikolalysenko Jun 9, 2026
0f1e05e
ci: drop removed cargo-coexist suite + go-guard-template lint step
mikolalysenko Jun 9, 2026
26014a1
refactor: remove the now-orphaned socket-patch-guard crate + stale re…
mikolalysenko Jun 9, 2026
724378c
refactor(go): parameterize replace-redirect engine by owner/base for …
mikolalysenko Jun 9, 2026
17fd546
docs(vendor): record phase-0 spike findings + uv lock-shape fixtures
mikolalysenko Jun 9, 2026
b153f71
feat(vendor): core module — path convention, state ledger, marker, ba…
mikolalysenko Jun 9, 2026
ef6ce86
refactor(cli): extract patch-source staging into commands/fetch_stage.rs
mikolalysenko Jun 10, 2026
2405554
feat(vendor): vendored-patch verification + Command::Vendor envelope tag
mikolalysenko Jun 10, 2026
f7cda25
feat(apply): yield to vendor ownership (golang skip, --check exclusio…
mikolalysenko Jun 10, 2026
22cfe19
feat(cli): vendor command pipeline + vendor telemetry events (not yet…
mikolalysenko Jun 10, 2026
ed7df81
docs: vendor command contract section + CHANGELOG entries
mikolalysenko Jun 10, 2026
28030b5
docs: single Added section in CHANGELOG Unreleased
mikolalysenko Jun 10, 2026
8df9beb
docs: place VEX golang fix under Unreleased, not 3.2.0
mikolalysenko Jun 10, 2026
5456130
feat(vendor): all six ecosystem backends + CLI wiring + VEX integration
mikolalysenko Jun 10, 2026
37ad10d
fix(vendor): prune empty ecosystem dirs on full revert
mikolalysenko Jun 10, 2026
65ed4bd
test(vendor): parser-contract + in-process suites; fix SOCKET_FORCE b…
mikolalysenko Jun 10, 2026
1f42ad9
fix(vendor): correct event classification + capstone e2e proofs
mikolalysenko Jun 10, 2026
0e602d6
fix(vendor): security + scoping fixes from adversarial review
mikolalysenko Jun 10, 2026
dd3a80c
feat(vendor): v2 phase 1 — boolish env parsing, composer reference uu…
mikolalysenko Jun 10, 2026
4d78a43
feat(vendor): v2 phases 2-3+5 — gem CHECKSUMS, flavor probes, refacto…
mikolalysenko Jun 10, 2026
8d5b9cd
chore(vendor): declare v2 backend module stubs
mikolalysenko Jun 10, 2026
a8a2e94
feat(vendor): v2 backend implementations (yarn classic/berry, pnpm, b…
mikolalysenko Jun 10, 2026
630d8fe
feat(vendor): wire v2 backends into the npm/pypi routers
mikolalysenko Jun 10, 2026
f381a6e
docs(vendor): v2 contract — flavor matrix, checksum table, reason cod…
mikolalysenko Jun 10, 2026
68c627a
test(vendor): npm-family build-proof capstones (yarn classic/berry, p…
mikolalysenko Jun 10, 2026
611de94
test(vendor): docker build-proof capstones for poetry/pdm/pipenv
mikolalysenko Jun 10, 2026
0287e75
style: cargo fmt --all
mikolalysenko Jun 10, 2026
ef88678
Merge remote-tracking branch 'origin/main' into feat/vendor-command
mikolalysenko Jun 10, 2026
4a9309d
chore(vendor): drop spikes/ scratch from the branch
mikolalysenko Jun 10, 2026
781eb8e
fix(clippy): clear the CI clippy gate
mikolalysenko Jun 10, 2026
9de9d77
style(clippy): clear remaining --all-targets lints surfaced by rust 1.93
mikolalysenko Jun 10, 2026
6d7de2a
test(vendor): make unsupported-ecosystem test feature-aware
mikolalysenko Jun 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
style(clippy): clear remaining --all-targets lints surfaced by rust 1.93
CI's clippy job only lints `--workspace --all-features` (lib + bins), but the
1.93 toolchain bump surfaces warn-level lints under `--all-targets` in this
PR's files. Cleared so the whole workspace passes
`cargo clippy --workspace --all-features --all-targets -- -D warnings`.

Machine-applicable (via `cargo clippy --fix`): `map_or(false,..)`→`is_some_and`,
`map_or(true,..)`→`is_none_or`, `% n == 0`→`is_multiple_of`, needless
borrow/closure removals, struct-field shorthand, `iter().any(==)`→`contains`,
`&[x.clone()]`→`std::slice::from_ref(&x)`.

Hand fixes where the mechanical suggestion was wrong or lossy: snake_case test
fn names; doc paragraphs split from a preceding list with a blank `///` line
(indenting would render as a code block); a doc line starting with `+` reworded
so markdown doesn't parse it as a nested bullet; `type_complexity` allowed
file-wide in the fn-pointer case-table test; and `default_constructed_unit_structs`
allowed on the two `*_default_and_new_construct_cleanly` tests whose whole point
is to exercise `::default()`.

Also clears the two pre-existing `deno_crawler`/`crawler_go_e2e` sites
opportunistically (same toolchain-surfaced lints).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
  • Loading branch information
mikolalysenko and claude committed Jun 10, 2026
commit 9de9d7725843443401e18cb48b8161b2105d9d27
4 changes: 2 additions & 2 deletions crates/socket-patch-cli/tests/api_client_errors_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ async fn repair_with_blob_404_marks_failure_in_summary() {
"--download-only",
])
.current_dir(tmp.path())
.env("SOCKET_API_URL", &mock.uri())
.env("SOCKET_API_URL", mock.uri())
.env("SOCKET_API_TOKEN", "fake-token")
.env("SOCKET_ORG_SLUG", ORG_SLUG)
.output()
Expand Down Expand Up @@ -575,7 +575,7 @@ async fn repair_with_blob_404_marks_failure_in_summary() {
let has_failed_event = v
.get("events")
.and_then(|e| e.as_array())
.map_or(false, |a| a.iter().any(|e| e["action"] == "failed"));
.is_some_and(|a| a.iter().any(|e| e["action"] == "failed"));
assert!(
has_failed_event,
"repair must emit a per-artifact `failed` event for the 404; got: {v}"
Expand Down
4 changes: 4 additions & 0 deletions crates/socket-patch-cli/tests/cli_global_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
//! take an identifier), we supply a dummy value alongside the flag under
//! test so clap's parser can complete.

// The case tables below are tuples ending in `fn(&GlobalArgs)` pointers; a
// `type` alias per shape would add more noise than it removes in this test.
#![allow(clippy::type_complexity)]

use std::path::PathBuf;

use clap::Parser;
Expand Down
7 changes: 3 additions & 4 deletions crates/socket-patch-cli/tests/e2e_gem.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,7 @@ async fn requested_purls(server: &MockServer) -> Vec<String> {
.filter(|r| format!("{}", r.method) == "GET")
.filter_map(|r| {
let p = r.url.path();
p.strip_prefix("/patch/by-package/")
.map(|seg| percent_decode(seg))
p.strip_prefix("/patch/by-package/").map(percent_decode)
})
.collect()
}
Expand Down Expand Up @@ -454,7 +453,7 @@ fn test_gem_full_lifecycle() {

let files = &patch["files"];
assert!(
files.as_object().map_or(false, |f| !f.is_empty()),
files.as_object().is_some_and(|f| !f.is_empty()),
"patch should modify at least one file"
);

Expand Down Expand Up @@ -487,7 +486,7 @@ fn test_gem_full_lifecycle() {
let has_cve = vulns.iter().any(|v| {
v["cves"]
.as_array()
.map_or(false, |cves| cves.iter().any(|c| c == "CVE-2022-21831"))
.is_some_and(|cves| cves.iter().any(|c| c == "CVE-2022-21831"))
});
assert!(has_cve, "vulnerability list should include CVE-2022-21831");

Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-cli/tests/e2e_npm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ fn test_npm_full_lifecycle() {
let has_cve = vulns.iter().any(|v| {
v["cves"]
.as_array()
.map_or(false, |cves| cves.iter().any(|c| c == "CVE-2021-44906"))
.is_some_and(|cves| cves.iter().any(|c| c == "CVE-2021-44906"))
});
assert!(has_cve, "vulnerability list should include CVE-2021-44906");

Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-cli/tests/e2e_pypi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ fn test_pypi_full_lifecycle() {
let has_cve = vulns.iter().any(|v| {
v["cves"]
.as_array()
.map_or(false, |cves| cves.iter().any(|c| c == "CVE-2026-25580"))
.is_some_and(|cves| cves.iter().any(|c| c == "CVE-2026-25580"))
});
assert!(has_cve, "vulnerability list should include CVE-2026-25580");

Expand Down
6 changes: 3 additions & 3 deletions crates/socket-patch-cli/tests/e2e_safety_cargo_build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
//! 2. **Negative control**: mutate the source file without running
//! apply, run `cargo check` — fails with "checksum changed".
//! Proves cargo actually verifies.
//! 3. **Sidecar round trip**: synthesize a `.socket/manifest.json`
//! + after-hash blob, run `socket-patch apply`, run `cargo check`
//! — succeeds. The sidecar fixup is the load-bearing piece.
//! 3. **Sidecar round trip**: synthesize a `.socket/manifest.json` plus an
//! after-hash blob, run `socket-patch apply`, run `cargo check` — it
//! succeeds. The sidecar fixup is the load-bearing piece.
//! 4. **`package` field preserved**: assert
//! `.cargo-checksum.json`'s `"package"` key survives the rewrite
//! unchanged (cargo doesn't verify it at build time, but we
Expand Down
1 change: 1 addition & 0 deletions crates/socket-patch-cli/tests/e2e_safety_cow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ fn assert_applied(env: &serde_json::Value, purl: &str, expected_paths: &[&str])
/// * the atomic writer (`apply::write_atomic`) stages `.socket-stage-*`,
/// * **CoW** (`cow::write_via_stage_rename`, the hardlink and symlink
/// branches) stages `.socket-cow-*`.
///
/// Both must be renamed-over on success or unlinked on failure, so a
/// completed apply — success OR clean failure — must leave neither prefix
/// behind.
Expand Down
4 changes: 2 additions & 2 deletions crates/socket-patch-cli/tests/ecosystem_dispatch_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ fn assert_apply_dispatched(code: i32, env: &Value, ecosystem: &str, expected_pur
);
for purl in expected_purls {
let found = events.iter().any(|e| {
e["purl"] == Value::from(*purl)
e["purl"] == *purl
&& e["action"] == "skipped"
&& e["errorCode"] == "package_not_installed"
});
Expand Down Expand Up @@ -192,7 +192,7 @@ fn assert_apply_not_dispatched(env: &Value, ecosystem: &str, out_of_scope_purls:
events.len()
);
for purl in out_of_scope_purls {
let leaked = events.iter().any(|e| e["purl"] == Value::from(*purl));
let leaked = events.iter().any(|e| e["purl"] == *purl);
assert!(
!leaked,
"apply --ecosystems={ecosystem}: out-of-scope PURL {purl} leaked into events — the --ecosystems filter did not exclude it; env={env}"
Expand Down
8 changes: 4 additions & 4 deletions crates/socket-patch-cli/tests/global_packages_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ fn assert_rollback_noop(stdout: &str) {
#[test]
fn apply_global_resolves_real_npm_prefix() {
let tmp = tempfile::tempdir().unwrap();
write_manifest(&tmp.path(), "pkg:npm/__global_test__@1.0.0");
write_manifest(tmp.path(), "pkg:npm/__global_test__@1.0.0");

let out = Command::new(binary())
.args(["apply", "--global", "--offline", "--json", "--silent"])
Expand All @@ -192,7 +192,7 @@ fn apply_global_resolves_real_npm_prefix() {
#[test]
fn rollback_global_resolves_real_npm_prefix() {
let tmp = tempfile::tempdir().unwrap();
write_manifest(&tmp.path(), "pkg:npm/__rollback_global__@1.0.0");
write_manifest(tmp.path(), "pkg:npm/__rollback_global__@1.0.0");

let out = Command::new(binary())
.args(["rollback", "--global", "--offline", "--json", "--silent"])
Expand Down Expand Up @@ -354,7 +354,7 @@ fn apply_global_with_empty_path_handles_missing_npm() {
// deterministic "package_not_installed" outcome as a resolved-but-
// empty global tree.
let tmp = tempfile::tempdir().unwrap();
write_manifest(&tmp.path(), "pkg:npm/__missing_npm__@1.0.0");
write_manifest(tmp.path(), "pkg:npm/__missing_npm__@1.0.0");

let out = Command::new(binary())
.args(["apply", "--global", "--offline", "--json", "--silent"])
Expand All @@ -376,7 +376,7 @@ fn apply_global_with_empty_path_handles_missing_npm() {
#[test]
fn rollback_global_with_empty_path_handles_missing_npm() {
let tmp = tempfile::tempdir().unwrap();
write_manifest(&tmp.path(), "pkg:npm/__missing_npm__@1.0.0");
write_manifest(tmp.path(), "pkg:npm/__missing_npm__@1.0.0");

let out = Command::new(binary())
.args(["rollback", "--global", "--offline", "--json", "--silent"])
Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-cli/tests/in_process_python_envs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ fn default_args(cwd: &Path, api_url: String) -> ScanArgs {
yes: true,
global: false,
global_prefix: None,
api_url: api_url,
api_url,
api_token: Some("fake".to_string()),
ecosystems: Some(vec!["pypi".to_string()]),
download_mode: "diff".to_string(),
Expand Down
3 changes: 2 additions & 1 deletion crates/socket-patch-cli/tests/repair_invariants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const ORG_SLUG: &str = "test-org";
/// manifest-not-found / override assertions would be meaningless;
/// * `SOCKET_DOWNLOAD_ONLY` / `SOCKET_DOWNLOAD_MODE` / `SOCKET_DRY_RUN`
/// could flip the cleanup-vs-download branch out from under the test.
///
/// We scrub the whole set and then re-set only the handful a given test
/// deliberately controls.
const SOCKET_ENV_VARS: &[&str] = &[
Expand Down Expand Up @@ -495,7 +496,7 @@ async fn repair_online_downloads_missing_blob() {
"file",
"--download-only",
])
.env("SOCKET_API_URL", &mock.uri())
.env("SOCKET_API_URL", mock.uri())
.env("SOCKET_API_TOKEN", "fake-token-for-test")
.env("SOCKET_ORG_SLUG", ORG_SLUG)
.output()
Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/src/api/blob_fetcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,7 @@ mod tests {
files.insert(
format!("package/file{}.js", i),
PatchFileInfo {
before_hash: format!("before{}{}", "0".repeat(58), format!("{:06}", i)),
before_hash: format!("before{}{:06}", "0".repeat(58), i),
after_hash: ah.to_string(),
},
);
Expand Down
3 changes: 3 additions & 0 deletions crates/socket-patch-core/src/crawlers/deno_crawler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,9 @@ mod tests {
assert!(!is_deno_project(tmp.path()).await);
}

// The whole point of this test is to exercise `::default()`, so the
// `default_constructed_unit_structs` lint is deliberately allowed here.
#[allow(clippy::default_constructed_unit_structs)]
#[tokio::test]
async fn deno_crawler_default_and_new_construct_cleanly() {
let _a = DenoCrawler::default();
Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/src/crawlers/go_crawler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -915,7 +915,7 @@ mod tests {
let crawler = GoCrawler::new();
let qualified = "pkg:golang/github.com/gin-gonic/gin@v1.9.1?type=module".to_string();
let result = crawler
.find_by_purls(dir.path(), &[qualified.clone()])
.find_by_purls(dir.path(), std::slice::from_ref(&qualified))
.await
.unwrap();

Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/src/manifest/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ mod tests {
let json = r#"{ "patches": {}, "setup": {} }"#;
let manifest: PatchManifest = serde_json::from_str(json).unwrap();
// The empty object parses into a (logically empty) config...
assert!(manifest.setup.as_ref().map_or(true, SetupConfig::is_empty));
assert!(manifest.setup.as_ref().is_none_or(SetupConfig::is_empty));
// ...but must not survive into the serialized form.
let reserialized = serde_json::to_string(&manifest).unwrap();
assert!(
Expand Down
11 changes: 3 additions & 8 deletions crates/socket-patch-core/src/patch/vendor/toml_surgery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,7 @@ mod tests {
fn find_unit_span_selects_the_matching_package_unit() {
// The first unit includes its [package.*] sub-table but not the
// trailing blank separator.
let span =
find_unit_span(LOCK, |lines| lines.iter().any(|l| *l == "name = \"proj\"")).unwrap();
let span = find_unit_span(LOCK, |lines| lines.contains(&"name = \"proj\"")).unwrap();
let unit = &LOCK[span];
assert!(unit.starts_with("[[package]]"));
assert!(unit.contains("[package.metadata]"), "sub-table included");
Expand All @@ -248,18 +247,14 @@ mod tests {
);

// The second (last) unit ends at the last non-blank line.
let span =
find_unit_span(LOCK, |lines| lines.iter().any(|l| *l == "name = \"six\"")).unwrap();
let span = find_unit_span(LOCK, |lines| lines.contains(&"name = \"six\"")).unwrap();
assert_eq!(
&LOCK[span],
"[[package]]\nname = \"six\"\nversion = \"1.16.0\""
);

// No match → None.
assert!(find_unit_span(LOCK, |lines| lines
.iter()
.any(|l| *l == "name = \"absent\""))
.is_none());
assert!(find_unit_span(LOCK, |lines| lines.contains(&"name = \"absent\"")).is_none());
}

#[test]
Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/src/utils/telemetry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1128,7 +1128,7 @@ mod tests {
/// arithmetic — so a regression in either is caught.
fn brute_days_to_ymd(days: u64) -> (u64, u64, u64) {
fn is_leap(y: u64) -> bool {
(y % 4 == 0 && y % 100 != 0) || y % 400 == 0
(y.is_multiple_of(4) && !y.is_multiple_of(100)) || y.is_multiple_of(400)
}
let mut rem = days;
let mut y = 1970u64;
Expand Down
1 change: 1 addition & 0 deletions crates/socket-patch-core/src/vex/conformance_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ fn sample_doc() -> Document {
/// transpose to collapse:
/// * two PURLs into one product with TWO subcomponents, and
/// * the duplicated `CVE-DUP` into a single alias.
///
/// The uniqueness/dedup conformance invariants below are vacuous
/// against `sample_doc`; they only have teeth against a merged
/// statement.
Expand Down
6 changes: 3 additions & 3 deletions crates/socket-patch-core/src/vex/product.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1129,9 +1129,9 @@ mod tests {
);
}

/// When multiple manifests are present but NONE parse, there is no
/// product to surface and therefore no "using X" warning to emit
/// (it would name a manifest that wasn't actually used).
// When multiple manifests are present but NONE parse, there is no
// product to surface and therefore no "using X" warning to emit
// (it would name a manifest that wasn't actually used).
// ── Regression: TOML single-quoted (literal) string values ────────
// TOML permits `key = 'value'` (literal strings) as well as
// `key = "value"`. The scanner previously only accepted the
Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/tests/crawler_cargo_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ fn parse_cargo_toml_ignores_lines_before_package_section() {
/// for symmetry.
#[test]
fn cargo_crawler_default_and_new_construct_cleanly() {
let _a = CargoCrawler::default();
let _a = CargoCrawler;
let _b = CargoCrawler::new();
}

Expand Down
5 changes: 4 additions & 1 deletion crates/socket-patch-core/tests/crawler_go_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,9 @@ async fn crawl_all_handles_unreadable_cache_path() {

/// `GoCrawler::default()` should forward to `new()` — and the two must be
/// behaviorally identical, not merely both constructible.
// The whole point of this test is to exercise `::default()`, so the
// `default_constructed_unit_structs` lint is deliberately allowed here.
#[allow(clippy::default_constructed_unit_structs)]
#[tokio::test]
async fn go_crawler_default_and_new_construct_cleanly() {
let tmp = tempfile::tempdir().unwrap();
Expand Down Expand Up @@ -294,7 +297,7 @@ async fn find_by_purls_module_dir_missing_returns_empty() {
let crawler = GoCrawler;
let missing_purl = "pkg:golang/github.com/gin-gonic/gin@v9.9.9".to_string();
let result = crawler
.find_by_purls(tmp.path(), &[missing_purl.clone()])
.find_by_purls(tmp.path(), std::slice::from_ref(&missing_purl))
.await
.unwrap();
assert!(
Expand Down
6 changes: 3 additions & 3 deletions crates/socket-patch-core/tests/crawler_maven_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ fn parse_pom_well_formed_extracts_coordinates() {
}

#[test]
fn parse_pom_missing_groupId_returns_none() {
fn parse_pom_missing_group_id_returns_none() {
let pom = r#"<?xml version="1.0"?>
<project>
<artifactId>commons-lang3</artifactId>
Expand Down Expand Up @@ -165,7 +165,7 @@ fn parse_pom_property_reference_version_returns_none() {
/// reference — must NOT be accepted as a fallback groupId (line 86-87
/// skip arm).
#[test]
fn parse_pom_missing_artifactId_returns_none() {
fn parse_pom_missing_artifact_id_returns_none() {
let pom = r#"<?xml version="1.0"?>
<project>
<groupId>org.apache.commons</groupId>
Expand Down Expand Up @@ -195,7 +195,7 @@ fn parse_pom_split_tag_returns_none() {
/// `MavenCrawler::default()` should forward to `new()`.
#[test]
fn maven_crawler_default_and_new_construct_cleanly() {
let _a = MavenCrawler::default();
let _a = MavenCrawler;
let _b = MavenCrawler::new();
}

Expand Down
4 changes: 2 additions & 2 deletions crates/socket-patch-core/tests/crawler_npm_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ async fn read_package_json_empty_version_returns_none() {
#[test]
fn npm_crawler_new_and_default_construct_cleanly() {
let _a = NpmCrawler::new();
let _b = NpmCrawler::default();
let _b = NpmCrawler;
}

// ── get_node_modules_paths ─────────────────────────────────────
Expand Down Expand Up @@ -494,7 +494,7 @@ async fn find_by_purls_resolves_qualified_purl_keyed_by_input() {
let crawler = NpmCrawler;
let qualified = "pkg:npm/lodash@4.17.21?extension=tgz".to_string();
let result = crawler
.find_by_purls(&nm, &[qualified.clone()])
.find_by_purls(&nm, std::slice::from_ref(&qualified))
.await
.unwrap();

Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/tests/crawler_nuget_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ async fn crawl_all_missing_pkg_path_returns_empty() {

#[test]
fn nuget_crawler_default_and_new_construct_cleanly() {
let _a = NuGetCrawler::default();
let _a = NuGetCrawler;
let _b = NuGetCrawler::new();
}

Expand Down
2 changes: 1 addition & 1 deletion crates/socket-patch-core/tests/crawler_python_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ async fn crawl_all_handles_unreadable_site_packages() {
/// `PythonCrawler::default()` should forward to `new()`.
#[test]
fn python_crawler_default_and_new_construct_cleanly() {
let _a = PythonCrawler::default();
let _a = PythonCrawler;
let _b = PythonCrawler::new();
}

Expand Down
4 changes: 2 additions & 2 deletions crates/socket-patch-core/tests/crawler_ruby_e2e.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ async fn find_by_purls_invalid_purl_skipped() {
let crawler = RubyCrawler;
let non_gem = "pkg:not-gem/rails@7.1.0".to_string();
let result = crawler
.find_by_purls(tmp.path(), &[non_gem.clone()])
.find_by_purls(tmp.path(), std::slice::from_ref(&non_gem))
.await
.unwrap();
assert!(
Expand Down Expand Up @@ -410,7 +410,7 @@ async fn crawl_all_handles_unreadable_gem_dir() {
/// `RubyCrawler::default()` should forward to `new()`.
#[test]
fn ruby_crawler_default_and_new_construct_cleanly() {
let _a = RubyCrawler::default();
let _a = RubyCrawler;
let _b = RubyCrawler::new();
}

Expand Down
Loading