From 9be56a19189308f22c682fc4b1732706b873fcc0 Mon Sep 17 00:00:00 2001 From: Shawn Garner <BusyByte@users.noreply.github.com> Date: Fri, 4 Jun 2021 14:27:18 -0500 Subject: [PATCH] Parse dependency definitions inside single and multi-line Sequences inside Scala dependency file (#10306) --- .../sbt/__fixtures__/dependency-file.scala | 7 +++++ .../sbt/__snapshots__/extract.spec.ts.snap | 30 +++++++++++++++++++ lib/manager/sbt/extract.ts | 22 ++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/lib/manager/sbt/__fixtures__/dependency-file.scala b/lib/manager/sbt/__fixtures__/dependency-file.scala index d9046d1219..bdd6f9fcd0 100644 --- a/lib/manager/sbt/__fixtures__/dependency-file.scala +++ b/lib/manager/sbt/__fixtures__/dependency-file.scala @@ -10,4 +10,11 @@ object Dependencies { val ujson = "com.example" %% "foo" % "0.7.1" lazy val abc = "com.abc" % "abc" % abcVersion + + val relatedDeps = Seq( + "com.abc" % "abc-a" % abcVersion, + "com.abc" % "abc-b" % abcVersion + ) + + val aloneDepInSeq = Seq("com.abc" % "abc-c" % abcVersion) } diff --git a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap index c05ae39e1c..38bb61b805 100644 --- a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap @@ -69,6 +69,36 @@ Object { "https://repo.maven.apache.org/maven2", ], }, + Object { + "currentValue": "1.2.3", + "datasource": "sbt-package", + "depName": "com.abc:abc-a", + "groupName": "abcVersion for com.abc", + "lookupName": "com.abc:abc-a", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + ], + }, + Object { + "currentValue": "1.2.3", + "datasource": "sbt-package", + "depName": "com.abc:abc-b", + "groupName": "abcVersion for com.abc", + "lookupName": "com.abc:abc-b", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + ], + }, + Object { + "currentValue": "1.2.3", + "datasource": "sbt-package", + "depName": "com.abc:abc-c", + "groupName": "abcVersion for com.abc", + "lookupName": "com.abc:abc-c", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + ], + }, ], "packageFileVersion": undefined, } diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts index 6b6b2dc5d2..f83f81648c 100644 --- a/lib/manager/sbt/extract.ts +++ b/lib/manager/sbt/extract.ts @@ -86,6 +86,16 @@ const isVarDef = (str: string): boolean => str ); +const isVarSeqSingleLine = (str: string): boolean => + /^\s*(private\s*)?(lazy\s*)?val\s+[_a-zA-Z][_a-zA-Z0-9]*\s*=\s*Seq\(.*\).*\s*$/.test( + str + ); + +const isVarSeqMultipleLine = (str: string): boolean => + /^\s*(private\s*)?(lazy\s*)?val\s+[_a-zA-Z][_a-zA-Z0-9]*\s*=\s*Seq\(.*[^)]*.*$/.test( + str + ); + const getVarName = (str: string): string => str .replace(/^\s*(private\s*)?(lazy\s*)?val\s+/, '') @@ -231,6 +241,18 @@ function parseSbtLine( isMultiDeps = false; const url = getResolverUrl(line); registryUrls.push(url); + } else if (isVarSeqSingleLine(line)) { + isMultiDeps = false; + const depExpr = line.replace(/^.*Seq\(\s*/, '').replace(/\).*$/, ''); + dep = parseDepExpr(depExpr, { + ...ctx, + }); + } else if (isVarSeqMultipleLine(line)) { + isMultiDeps = true; + const depExpr = line.replace(/^.*Seq\(\s*/, ''); + dep = parseDepExpr(depExpr, { + ...ctx, + }); } else if (isVarDef(line)) { variables[getVarName(line)] = getVarInfo(line, ctx); } else if (isVarDependency(line)) { -- GitLab