diff --git a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap index 6ef285b041f564e351638afbbc211904d6c2be87..c554afc8302254a0ecfcca4068eee28f138ae4ff 100644 --- a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap @@ -428,6 +428,23 @@ Object { } `; +exports[`manager/sbt/extract extractPackageFile() extracts deps when scala version is defined in a variable with ThisBuild scope 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "0.0.2", + "datasource": "sbt-package", + "depName": "org.example:bar", + "lookupName": "org.example:bar_2.12", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + ], + }, + ], + "packageFileVersion": undefined, +} +`; + exports[`manager/sbt/extract extractPackageFile() extracts deps when scala version is defined in a variable with a trailing comma 1`] = ` Object { "deps": Array [ @@ -445,6 +462,33 @@ Object { } `; +exports[`manager/sbt/extract extractPackageFile() extracts deps when scala version is defined with ThisBuild scope 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "2.12.10", + "datasource": "maven", + "depName": "scala", + "lookupName": "org.scala-lang:scala-library", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + ], + "separateMinorPatch": true, + }, + Object { + "currentValue": "0.0.2", + "datasource": "sbt-package", + "depName": "org.example:bar", + "lookupName": "org.example:bar_2.12", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + ], + }, + ], + "packageFileVersion": undefined, +} +`; + exports[`manager/sbt/extract extractPackageFile() extracts deps when scala version is defined with a trailing comma 1`] = ` Object { "deps": Array [ diff --git a/lib/manager/sbt/extract.spec.ts b/lib/manager/sbt/extract.spec.ts index 3ec5df24960ec27ba8e7d3d0861efdf73c120af7..62f07a2b6f401564447f8bb20467a3fcd2cabef3 100644 --- a/lib/manager/sbt/extract.spec.ts +++ b/lib/manager/sbt/extract.spec.ts @@ -154,6 +154,39 @@ describe('manager/sbt/extract', () => { deps: [{ lookupName: 'org.example:bar_2.12', currentValue: '0.0.2' }], }); }); + it('extracts deps when scala version is defined with ThisBuild scope', () => { + const content = ` + ThisBuild / scalaVersion := "2.12.10" + libraryDependencies += "org.example" %% "bar" % "0.0.2" + `; + expect(extractPackageFile(content)).toMatchSnapshot({ + deps: [ + { + lookupName: 'org.scala-lang:scala-library', + currentValue: '2.12.10', + }, + { + lookupName: 'org.example:bar_2.12', + currentValue: '0.0.2', + }, + ], + }); + }); + it('extracts deps when scala version is defined in a variable with ThisBuild scope', () => { + const content = ` + val ScalaVersion = "2.12.10" + ThisBuild / scalaVersion := ScalaVersion + libraryDependencies += "org.example" %% "bar" % "0.0.2" + `; + expect(extractPackageFile(content)).toMatchSnapshot({ + deps: [ + { + lookupName: 'org.example:bar_2.12', + currentValue: '0.0.2', + }, + ], + }); + }); it('extract deps from native scala file with private variables', () => { expect( extractPackageFile(sbtPrivateVariableDependencyFile) diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts index 7c5e176721f1f0d566face49ad97d674988dccb9..73352f25b31775e7b0d3c8729bf96234e38841c2 100644 --- a/lib/manager/sbt/extract.ts +++ b/lib/manager/sbt/extract.ts @@ -23,11 +23,13 @@ const isPluginDep = (str: string): boolean => const isStringLiteral = (str: string): boolean => regEx(/^"[^"]*"$/).test(str); const isScalaVersion = (str: string): boolean => - regEx(/^\s*scalaVersion\s*:=\s*"[^"]*"[\s,]*$/).test(str); + regEx(/^\s*(?:ThisBuild\s*\/\s*)?scalaVersion\s*:=\s*"[^"]*"[\s,]*$/).test( + str + ); const getScalaVersion = (str: string): string => str - .replace(regEx(/^\s*scalaVersion\s*:=\s*"/), '') + .replace(regEx(/^\s*(?:ThisBuild\s*\/\s*)?scalaVersion\s*:=\s*"/), '') .replace(regEx(/"[\s,]*$/), ''); const isPackageFileVersion = (str: string): boolean => @@ -66,11 +68,13 @@ const normalizeScalaVersion = (str: string): string => { }; const isScalaVersionVariable = (str: string): boolean => - regEx(/^\s*scalaVersion\s*:=\s*[_a-zA-Z][_a-zA-Z0-9]*[\s,]*$/).test(str); + regEx( + /^\s*(?:ThisBuild\s*\/\s*)?scalaVersion\s*:=\s*[_a-zA-Z][_a-zA-Z0-9]*[\s,]*$/ + ).test(str); const getScalaVersionVariable = (str: string): string => str - .replace(regEx(/^\s*scalaVersion\s*:=\s*/), '') + .replace(regEx(/^\s*(?:ThisBuild\s*\/\s*)?scalaVersion\s*:=\s*/), '') .replace(regEx(/[\s,]*$/), ''); const isResolver = (str: string): boolean =>