From 4f4487fda6ed937b056c62e627e6c9b783694c10 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 15 Jun 2023 21:41:37 +0200
Subject: [PATCH] fix(cargo): widen not bump when value includes less-than
 (#22790)

---
 lib/modules/manager/cargo/range.spec.ts | 13 ++++++++++++-
 lib/modules/manager/cargo/range.ts      |  9 ++++++++-
 lib/modules/manager/cargo/readme.md     |  5 +++++
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lib/modules/manager/cargo/range.spec.ts b/lib/modules/manager/cargo/range.spec.ts
index 0356aac6a8..62c07b1389 100644
--- a/lib/modules/manager/cargo/range.spec.ts
+++ b/lib/modules/manager/cargo/range.spec.ts
@@ -7,8 +7,19 @@ describe('modules/manager/cargo/range', () => {
     expect(getRangeStrategy(config)).toBe('widen');
   });
 
+  it('returns widen if current value includes <', () => {
+    const config: RangeConfig = {
+      rangeStrategy: 'auto',
+      currentValue: '<1.0.0',
+    };
+    expect(getRangeStrategy(config)).toBe('widen');
+  });
+
   it('defaults to bump', () => {
-    const config: RangeConfig = { rangeStrategy: 'auto' };
+    const config: RangeConfig = {
+      rangeStrategy: 'auto',
+      currentValue: '1.0.0',
+    };
     expect(getRangeStrategy(config)).toBe('bump');
   });
 });
diff --git a/lib/modules/manager/cargo/range.ts b/lib/modules/manager/cargo/range.ts
index 8f3d6e7eb5..a04628d55c 100644
--- a/lib/modules/manager/cargo/range.ts
+++ b/lib/modules/manager/cargo/range.ts
@@ -2,7 +2,14 @@ import type { RangeStrategy } from '../../../types';
 import type { RangeConfig } from '../types';
 
 export function getRangeStrategy({
+  currentValue,
   rangeStrategy,
 }: RangeConfig): RangeStrategy {
-  return rangeStrategy === 'auto' ? 'bump' : rangeStrategy;
+  if (rangeStrategy !== 'auto') {
+    return rangeStrategy;
+  }
+  if (currentValue?.includes('<')) {
+    return 'widen';
+  }
+  return 'bump';
 }
diff --git a/lib/modules/manager/cargo/readme.md b/lib/modules/manager/cargo/readme.md
index 5b564a57cd..5e05f6a228 100644
--- a/lib/modules/manager/cargo/readme.md
+++ b/lib/modules/manager/cargo/readme.md
@@ -1 +1,6 @@
 Extracts dependencies from `Cargo.toml` files, and also updates `Cargo.lock` files too if found.
+
+When using the default rangeStrategy=auto:
+
+- If a "less than" instruction is found (e.g. `<2`) then `rangeStrategy=widen` will be selected,
+- Otherwise, `rangeStrategy=bump` will be selected.
-- 
GitLab