From 8fdbc4fd1c894a69df0cc7cb63b6e0c263ec236f Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Wed, 8 Apr 2020 10:56:37 +0200 Subject: [PATCH] refactor(sbt): use autoReplace --- .../sbt/__snapshots__/extract.spec.ts.snap | 22 --------- lib/manager/sbt/extract.ts | 45 ++---------------- lib/manager/sbt/index.ts | 4 +- lib/manager/sbt/update.spec.ts | 47 ------------------- lib/manager/sbt/update.ts | 9 ---- 5 files changed, 6 insertions(+), 121 deletions(-) delete mode 100644 lib/manager/sbt/update.spec.ts delete mode 100644 lib/manager/sbt/update.ts diff --git a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap index 326c671709..faa6b6c584 100644 --- a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap @@ -7,7 +7,6 @@ Object { "currentValue": "0.7.1", "datasource": "sbt-package", "depName": "com.example:foo_2.13.0-RC5", - "fileReplacePosition": 168, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", ], @@ -16,7 +15,6 @@ Object { "currentValue": "1.2.3", "datasource": "sbt-package", "depName": "com.abc:abc", - "fileReplacePosition": 120, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", ], @@ -32,7 +30,6 @@ Object { "currentValue": "0.0.1", "datasource": "sbt-package", "depName": "org.example:foo", - "fileReplacePosition": 132, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -46,7 +43,6 @@ Object { "currentValue": "0.0.2", "datasource": "sbt-package", "depName": "org.example:bar_2.9.10", - "fileReplacePosition": 188, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -60,7 +56,6 @@ Object { "currentValue": "0.0.3", "datasource": "sbt-package", "depName": "org.example:baz_2.9.10", - "fileReplacePosition": 252, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -74,7 +69,6 @@ Object { "currentValue": "0.0.4", "datasource": "sbt-package", "depName": "org.example:qux", - "fileReplacePosition": 287, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -88,7 +82,6 @@ Object { "currentValue": "0.0.5", "datasource": "sbt-package", "depName": "org.example:quux", - "fileReplacePosition": 346, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -103,7 +96,6 @@ Object { "datasource": "sbt-package", "depName": "org.example:quuz_2.9.10", "depType": "test", - "fileReplacePosition": 526, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -118,7 +110,6 @@ Object { "datasource": "sbt-package", "depName": "org.example:corge", "depType": "Provided", - "fileReplacePosition": 584, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -133,7 +124,6 @@ Object { "datasource": "sbt-package", "depName": "org.example:grault", "depType": "Test", - "fileReplacePosition": 479, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -148,7 +138,6 @@ Object { "datasource": "sbt-plugin", "depName": "org.example:waldo", "depType": "plugin", - "fileReplacePosition": 986, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -169,7 +158,6 @@ Object { "currentValue": "0.0.1", "datasource": "sbt-package", "depName": "org.example:foo", - "fileReplacePosition": 195, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -183,7 +171,6 @@ Object { "currentValue": "0.0.2", "datasource": "sbt-package", "depName": "org.example:bar_2.12", - "fileReplacePosition": 251, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -197,7 +184,6 @@ Object { "currentValue": "0.0.3", "datasource": "sbt-package", "depName": "org.example:baz_2.12", - "fileReplacePosition": 315, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -211,7 +197,6 @@ Object { "currentValue": "0.0.4", "datasource": "sbt-package", "depName": "org.example:qux", - "fileReplacePosition": 350, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -225,7 +210,6 @@ Object { "currentValue": "0.0.5", "datasource": "sbt-package", "depName": "org.example:quux", - "fileReplacePosition": 409, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -240,7 +224,6 @@ Object { "datasource": "sbt-package", "depName": "org.example:quuz_2.12", "depType": "test", - "fileReplacePosition": 553, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -255,7 +238,6 @@ Object { "datasource": "sbt-package", "depName": "org.example:corge", "depType": "Provided", - "fileReplacePosition": 611, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -270,7 +252,6 @@ Object { "datasource": "sbt-package", "depName": "org.example:grault", "depType": "Test", - "fileReplacePosition": 51, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -285,7 +266,6 @@ Object { "datasource": "sbt-plugin", "depName": "org.example:waldo", "depType": "plugin", - "fileReplacePosition": 1013, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://example.com/repos/1/", @@ -306,7 +286,6 @@ Object { "currentValue": "3.0.0", "datasource": "sbt-package", "depName": "org.scalatest:scalatest", - "fileReplacePosition": 65, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", ], @@ -316,7 +295,6 @@ Object { "datasource": "sbt-plugin", "depName": "com.github.gseitz:sbt-release", "depType": "plugin", - "fileReplacePosition": 100, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", ], diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts index af6763b47a..21900178ab 100644 --- a/lib/manager/sbt/extract.ts +++ b/lib/manager/sbt/extract.ts @@ -77,22 +77,16 @@ const getVarName = (str: string): string => const isVarName = (str: string): boolean => /^[_a-zA-Z][_a-zA-Z0-9]*$/.test(str); -const getVarInfo = ( - str: string, - ctx: ParseContext -): { val: string; fileReplacePosition: number } => { - const { fileOffset } = ctx; +const getVarInfo = (str: string, ctx: ParseContext): { val: string } => { const rightPart = str.replace( /^\s*(lazy\s*)?val\s+[_a-zA-Z][_a-zA-Z0-9]*\s*=\s*"/, '' ); - const fileReplacePosition = str.indexOf(rightPart) + fileOffset; const val = rightPart.replace(/"\s*$/, ''); - return { val, fileReplacePosition }; + return { val }; }; interface ParseContext { - fileOffset: number; scalaVersion: string; variables: any; depType?: string; @@ -102,7 +96,7 @@ function parseDepExpr( expr: string, ctx: ParseContext ): PackageDependency | null { - const { scalaVersion, fileOffset, variables } = ctx; + const { scalaVersion, variables } = ctx; let { depType } = ctx; const isValidToken = (str: string): boolean => @@ -164,28 +158,9 @@ function parseDepExpr( depType = rawScope.replace(/^"/, '').replace(/"$/, ''); } - let fileReplacePosition: number; - if (isStringLiteral(rawVersion)) { - // Calculate fileReplacePosition incrementally - // help us to avoid errors in updating phase. - fileReplacePosition = 0; - fileReplacePosition += - expr.slice(fileReplacePosition).indexOf(rawGroupId) + rawGroupId.length; - fileReplacePosition += - expr.slice(fileReplacePosition).indexOf(rawArtifactId) + - rawArtifactId.length; - fileReplacePosition += expr - .slice(fileReplacePosition) - .indexOf(currentValue); - fileReplacePosition += fileOffset; - } else { - fileReplacePosition = variables[rawVersion].fileReplacePosition; - } - const result: PackageDependency = { depName, currentValue, - fileReplacePosition, }; if (depType) { @@ -195,7 +170,6 @@ function parseDepExpr( return result; } interface ParseOptions { - fileOffset?: number; isMultiDeps?: boolean; scalaVersion?: string; variables?: Record<string, any>; @@ -207,13 +181,12 @@ function parseSbtLine( lineIndex: number, lines: string[] ): (PackageFile & ParseOptions) | null { - const { deps, registryUrls, fileOffset, variables } = acc; + const { deps, registryUrls, variables } = acc; let { isMultiDeps, scalaVersion } = acc; const ctx: ParseContext = { scalaVersion, - fileOffset, variables, }; @@ -238,38 +211,30 @@ function parseSbtLine( /^\s*(lazy\s*)?val\s[_a-zA-Z][_a-zA-Z0-9]*\s*=\s*/, '' ); - const expOffset = line.length - depExpr.length; dep = parseDepExpr(depExpr, { ...ctx, - fileOffset: fileOffset + expOffset, }); } else if (isSingleLineDep(line)) { isMultiDeps = false; const depExpr = line.replace(/^.*\+=\s*/, ''); - const expOffset = line.length - depExpr.length; dep = parseDepExpr(depExpr, { ...ctx, - fileOffset: fileOffset + expOffset, }); } else if (isPluginDep(line)) { isMultiDeps = false; const rightPart = line.replace(/^\s*addSbtPlugin\s*\(/, ''); - const expOffset = line.length - rightPart.length; const depExpr = rightPart.replace(/\)\s*$/, ''); dep = parseDepExpr(depExpr, { ...ctx, depType: 'plugin', - fileOffset: fileOffset + expOffset, }); } else if (isDepsBegin(line)) { isMultiDeps = true; } else if (isMultiDeps) { const rightPart = line.replace(/^[\s,]*/, ''); - const expOffset = line.length - rightPart.length; const depExpr = rightPart.replace(/[\s,]*$/, ''); dep = parseDepExpr(depExpr, { ...ctx, - fileOffset: fileOffset + expOffset, }); } } @@ -289,7 +254,6 @@ function parseSbtLine( if (lineIndex + 1 < lines.length) { return { ...acc, - fileOffset: fileOffset + line.length + 1, // inc. newline isMultiDeps, scalaVersion: scalaVersion || @@ -310,7 +274,6 @@ export function extractPackageFile(content: string): PackageFile { } const lines = content.split(/\n/); return lines.reduce(parseSbtLine, { - fileOffset: 0, registryUrls: [MAVEN_REPO], deps: [], isMultiDeps: false, diff --git a/lib/manager/sbt/index.ts b/lib/manager/sbt/index.ts index 213eb810cb..424d3cecf4 100644 --- a/lib/manager/sbt/index.ts +++ b/lib/manager/sbt/index.ts @@ -1,10 +1,10 @@ import * as ivyVersioning from '../../versioning/ivy'; export { extractPackageFile } from './extract'; -export { updateDependency } from './update'; + +export const autoReplace = true; export const defaultConfig = { fileMatch: ['\\.sbt$', 'project/[^/]*.scala$'], - timeout: 300, versioning: ivyVersioning.id, }; diff --git a/lib/manager/sbt/update.spec.ts b/lib/manager/sbt/update.spec.ts deleted file mode 100644 index 3bee441996..0000000000 --- a/lib/manager/sbt/update.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { readFileSync } from 'fs'; -import { resolve } from 'path'; -import { extractPackageFile } from './extract'; -import { updateDependency } from './update'; -import { Upgrade } from '../common'; - -const sbtPath = resolve(__dirname, `./__fixtures__/sample.sbt`); -const fileContent = readFileSync(sbtPath, 'utf8'); - -describe('lib/manager/sbt/extract', () => { - describe('updateDependency()', () => { - it('returns content untouched if versions are same', () => { - const { deps } = extractPackageFile(fileContent); - const upgrade: Upgrade = deps.shift(); - upgrade.newValue = upgrade.currentValue; - const newFileContent = updateDependency({ fileContent, upgrade }); - expect(newFileContent).toBe(fileContent); - }); - it('returns null if content has been updated somewhere', () => { - const { deps } = extractPackageFile(fileContent); - const upgrade: Upgrade = deps.shift(); - upgrade.newValue = '0.1.1'; - const newFileContent = updateDependency({ - fileContent: fileContent.replace('0.0.1', '0.1.0'), - upgrade, - }); - expect(newFileContent).toBeNull(); - }); - it('updates old deps to newer ones', () => { - const { deps } = extractPackageFile(fileContent); - const upgrades = deps.map((dep, idx) => { - const minor = idx + 1; - const newValue = `123.456.${minor}`; - return { - ...dep, - newValue, - }; - }); - upgrades.forEach(upgrade => { - const { currentValue, newValue } = upgrade; - const newFileContent = updateDependency({ fileContent, upgrade }); - const cmpContent = fileContent.replace(currentValue, newValue); - expect(newFileContent).toEqual(cmpContent); - }); - }); - }); -}); diff --git a/lib/manager/sbt/update.ts b/lib/manager/sbt/update.ts deleted file mode 100644 index b12e6e44d7..0000000000 --- a/lib/manager/sbt/update.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UpdateDependencyConfig } from '../common'; -import { updateAtPosition } from '../maven/update'; - -export function updateDependency({ - fileContent, - upgrade, -}: UpdateDependencyConfig): string | null { - return updateAtPosition(fileContent, upgrade); -} -- GitLab