From ff0ffd2e9093ec3ccb74bc6bf12cdf826f00e31a Mon Sep 17 00:00:00 2001
From: Vladislav Dolbilov <darl@yandex-team.ru>
Date: Tue, 14 Jan 2020 12:24:48 +0100
Subject: [PATCH] fix(sbt): normalize scala version

---
 lib/manager/sbt/extract.ts                     | 12 ++++++++++--
 .../sbt/__snapshots__/extract.spec.ts.snap     | 18 +++++++++---------
 .../sbt/_fixtures/scala-version-variable.sbt   |  2 +-
 3 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts
index 16b20647ba..10b2e0ba66 100644
--- a/lib/manager/sbt/extract.ts
+++ b/lib/manager/sbt/extract.ts
@@ -20,6 +20,14 @@ const isScalaVersion = (str: string): boolean =>
 const getScalaVersion = (str: string): string =>
   str.replace(/^\s*scalaVersion\s*:=\s*"/, '').replace(/"\s*$/, '');
 
+/*
+  https://www.scala-sbt.org/release/docs/Cross-Build.html#Publishing+conventions
+ */
+const normalizeScalaVersion = (str: string): string =>
+  /^\d+\.\d+\.\d+$/.test(str)
+    ? str.replace(/^(\d+)\.(\d+)\.\d+$/, '$1.$2')
+    : str;
+
 const isScalaVersionVariable = (str: string): boolean =>
   /^\s*scalaVersion\s*:=\s*[_a-zA-Z][_a-zA-Z0-9]*\s*$/.test(str);
 
@@ -170,7 +178,7 @@ function parseSbtLine(
   if (!isComment(line)) {
     if (isScalaVersion(line)) {
       isMultiDeps = false;
-      scalaVersion = getScalaVersion(line);
+      scalaVersion = normalizeScalaVersion(getScalaVersion(line));
     } else if (isScalaVersionVariable(line)) {
       isMultiDeps = false;
       scalaVersionVariable = getScalaVersionVariable(line);
@@ -227,7 +235,7 @@ function parseSbtLine(
         scalaVersion ||
         (scalaVersionVariable &&
           variables[scalaVersionVariable] &&
-          variables[scalaVersionVariable].val),
+          normalizeScalaVersion(variables[scalaVersionVariable].val)),
     };
   if (deps.length) return { deps };
   return null;
diff --git a/test/manager/sbt/__snapshots__/extract.spec.ts.snap b/test/manager/sbt/__snapshots__/extract.spec.ts.snap
index 96fb1dca21..58f73549a3 100644
--- a/test/manager/sbt/__snapshots__/extract.spec.ts.snap
+++ b/test/manager/sbt/__snapshots__/extract.spec.ts.snap
@@ -144,7 +144,7 @@ Object {
       "currentValue": "0.0.1",
       "datasource": "sbt",
       "depName": "org.example:foo",
-      "fileReplacePosition": 192,
+      "fileReplacePosition": 195,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -158,7 +158,7 @@ Object {
       "currentValue": "0.0.2",
       "datasource": "sbt",
       "depName": "org.example:bar_2.12",
-      "fileReplacePosition": 248,
+      "fileReplacePosition": 251,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -172,7 +172,7 @@ Object {
       "currentValue": "0.0.3",
       "datasource": "sbt",
       "depName": "org.example:baz_2.12",
-      "fileReplacePosition": 312,
+      "fileReplacePosition": 315,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -186,7 +186,7 @@ Object {
       "currentValue": "0.0.4",
       "datasource": "sbt",
       "depName": "org.example:qux",
-      "fileReplacePosition": 347,
+      "fileReplacePosition": 350,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -200,7 +200,7 @@ Object {
       "currentValue": "0.0.5",
       "datasource": "sbt",
       "depName": "org.example:quux",
-      "fileReplacePosition": 406,
+      "fileReplacePosition": 409,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -215,7 +215,7 @@ Object {
       "datasource": "sbt",
       "depName": "org.example:quuz_2.12",
       "depType": "test",
-      "fileReplacePosition": 550,
+      "fileReplacePosition": 553,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -230,7 +230,7 @@ Object {
       "datasource": "sbt",
       "depName": "org.example:corge",
       "depType": "Provided",
-      "fileReplacePosition": 608,
+      "fileReplacePosition": 611,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -245,7 +245,7 @@ Object {
       "datasource": "sbt",
       "depName": "org.example:grault",
       "depType": "Test",
-      "fileReplacePosition": 48,
+      "fileReplacePosition": 51,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
@@ -260,7 +260,7 @@ Object {
       "datasource": "sbt",
       "depName": "org.example:waldo",
       "depType": "plugin",
-      "fileReplacePosition": 1010,
+      "fileReplacePosition": 1013,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://example.com/repos/1/",
diff --git a/test/manager/sbt/_fixtures/scala-version-variable.sbt b/test/manager/sbt/_fixtures/scala-version-variable.sbt
index 9cdeb6bb71..fd0abe2efd 100644
--- a/test/manager/sbt/_fixtures/scala-version-variable.sbt
+++ b/test/manager/sbt/_fixtures/scala-version-variable.sbt
@@ -1,4 +1,4 @@
-val ScalaVersion = "2.12"
+val ScalaVersion = "2.12.10"
 val versionExample = "0.0.8"
 
 scalaVersion := ScalaVersion
-- 
GitLab