From 7178da30743b88b289d2f2cd859891d4c07be3ab Mon Sep 17 00:00:00 2001 From: george-wilson-rea <106576487+george-wilson-rea@users.noreply.github.com> Date: Thu, 13 Jun 2024 20:04:11 +1000 Subject: [PATCH] refactor: Tidy Scala version normalization code (#29642) --- lib/modules/manager/sbt/extract.ts | 6 +---- lib/modules/manager/sbt/util.spec.ts | 39 +++++++++++++++++++++++++++- lib/modules/manager/sbt/util.ts | 7 ++++- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/lib/modules/manager/sbt/extract.ts b/lib/modules/manager/sbt/extract.ts index 8be2b047dcec72..747245f1ae14ee 100644 --- a/lib/modules/manager/sbt/extract.ts +++ b/lib/modules/manager/sbt/extract.ts @@ -201,16 +201,12 @@ function depHandler(ctx: Ctx): Ctx { delete ctx.variableName; const depName = `${groupId!}:${artifactId!}`; - const isScala3 = scalaVersion?.[0] === '3'; - const scalaVersionForPackageName = isScala3 ? '3' : scalaVersion; const dep: PackageDependency = { datasource: SbtPackageDatasource.id, depName, packageName: - scalaVersionForPackageName && useScalaVersion - ? `${depName}_${scalaVersionForPackageName}` - : depName, + scalaVersion && useScalaVersion ? `${depName}_${scalaVersion}` : depName, currentValue, }; diff --git a/lib/modules/manager/sbt/util.spec.ts b/lib/modules/manager/sbt/util.spec.ts index b4cdb90b7b408d..83f959fba397e4 100644 --- a/lib/modules/manager/sbt/util.spec.ts +++ b/lib/modules/manager/sbt/util.spec.ts @@ -1,4 +1,4 @@ -import { sortPackageFiles } from './util'; +import { normalizeScalaVersion, sortPackageFiles } from './util'; describe('modules/manager/sbt/util', () => { describe('sortPackageFiles()', () => { @@ -15,4 +15,41 @@ describe('modules/manager/sbt/util', () => { ]); }); }); + + describe('normalizeScalaVersion()', () => { + it('does not normalize prior to 2.10', () => { + const version = '2.9.3'; + expect(normalizeScalaVersion(version)).toBe('2.9.3'); + }); + + it('normalizes a Scala 2.10 version number', () => { + const version = '2.10.7'; + expect(normalizeScalaVersion(version)).toBe('2.10'); + }); + + it('normalizes a Scala 2.11 version number', () => { + const version = '2.11.12'; + expect(normalizeScalaVersion(version)).toBe('2.11'); + }); + + it('normalizes a Scala 2.12 version number', () => { + const version = '2.12.19'; + expect(normalizeScalaVersion(version)).toBe('2.12'); + }); + + it('normalizes a Scala 2.13 version number', () => { + const version = '2.13.14'; + expect(normalizeScalaVersion(version)).toBe('2.13'); + }); + + it('normalizes a Scala 3 LTS version number', () => { + const version = '3.3.3'; + expect(normalizeScalaVersion(version)).toBe('3'); + }); + + it('normalizes a Scala 3 current version number', () => { + const version = '3.4.2'; + expect(normalizeScalaVersion(version)).toBe('3'); + }); + }); }); diff --git a/lib/modules/manager/sbt/util.ts b/lib/modules/manager/sbt/util.ts index aa85d9bcbe1f54..a7d1dbce8afb5e 100644 --- a/lib/modules/manager/sbt/util.ts +++ b/lib/modules/manager/sbt/util.ts @@ -21,8 +21,13 @@ export function normalizeScalaVersion(str: string): string { return str; } } + const isScala3 = versioning.isGreaterThan(str, '3.0.0'); if (regEx(/^\d+\.\d+\.\d+$/).test(str)) { - return str.replace(regEx(/^(\d+)\.(\d+)\.\d+$/), '$1.$2'); + if (isScala3) { + return str.replace(regEx(/^(\d+)\.(\d+)\.\d+$/), '$1'); + } else { + return str.replace(regEx(/^(\d+)\.(\d+)\.\d+$/), '$1.$2'); + } } // istanbul ignore next return str;