From 967f9f60268fc42084fe500ab5fd5f6b6539d5ca Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Wed, 8 Apr 2020 11:05:40 +0200 Subject: [PATCH] refactor(swift): use autoReplace --- .../swift/__snapshots__/index.spec.ts.snap | 14 ---- lib/manager/swift/extract.ts | 12 +--- lib/manager/swift/index.spec.ts | 72 ------------------- lib/manager/swift/index.ts | 3 +- lib/manager/swift/update.ts | 30 -------- lib/versioning/swift/index.spec.ts | 5 ++ 6 files changed, 8 insertions(+), 128 deletions(-) delete mode 100644 lib/manager/swift/update.ts diff --git a/lib/manager/swift/__snapshots__/index.spec.ts.snap b/lib/manager/swift/__snapshots__/index.spec.ts.snap index f29363555b..0929928316 100644 --- a/lib/manager/swift/__snapshots__/index.spec.ts.snap +++ b/lib/manager/swift/__snapshots__/index.spec.ts.snap @@ -8,21 +8,18 @@ Object { ", "datasource": "git-tags", "depName": "0x7fs/CountedSet", - "fileReplacePosition": 939, "lookupName": "https://github.com/0x7fs/CountedSet", }, Object { "currentValue": "0.1.0", "datasource": "git-tags", "depName": "avito-tech/GraphiteClient", - "fileReplacePosition": 1177, "lookupName": "https://github.com/avito-tech/GraphiteClient.git", }, Object { "currentValue": "1.0.16", "datasource": "git-tags", "depName": "IBM-Swift/BlueSignals", - "fileReplacePosition": 1268, "lookupName": "https://github.com/IBM-Swift/BlueSignals.git", }, Object { @@ -30,28 +27,24 @@ Object { ", "datasource": "git-tags", "depName": "beefon/Shout", - "fileReplacePosition": 1345, "lookupName": "https://github.com/beefon/Shout", }, Object { "currentValue": "3.0.6", "datasource": "git-tags", "depName": "daltoniam/Starscream", - "fileReplacePosition": 1439, "lookupName": "https://github.com/daltoniam/Starscream.git", }, Object { "currentValue": "1.4.6", "datasource": "git-tags", "depName": "httpswift/swifter", - "fileReplacePosition": 1523, "lookupName": "https://github.com/httpswift/swifter.git", }, Object { "currentValue": "from : \\"0.9.6\\"", "datasource": "git-tags", "depName": "weichsel/ZIPFoundation", - "fileReplacePosition": 1626, "lookupName": "https://github.com/weichsel/ZIPFoundation/", }, Object { @@ -59,7 +52,6 @@ Object { ", "datasource": "git-tags", "depName": "apple/swift-package-manager", - "fileReplacePosition": 1726, "lookupName": "https://github.com/apple/swift-package-manager.git", }, ], @@ -74,7 +66,6 @@ Object { "currentValue": "from:\\"1.2.3\\"", "datasource": "git-tags", "depName": "vapor/vapor", - "fileReplacePosition": 64, "lookupName": "https://github.com/vapor/vapor.git", }, ], @@ -89,7 +80,6 @@ Object { "currentValue": "\\"1.2.3\\"...", "datasource": "git-tags", "depName": "vapor/vapor", - "fileReplacePosition": 64, "lookupName": "https://github.com/vapor/vapor.git", }, ], @@ -104,7 +94,6 @@ Object { "currentValue": "\\"1.2.3\\"...\\"1.2.4\\"", "datasource": "git-tags", "depName": "vapor/vapor", - "fileReplacePosition": 64, "lookupName": "https://github.com/vapor/vapor.git", }, ], @@ -119,7 +108,6 @@ Object { "currentValue": "\\"1.2.3\\"..<\\"1.2.4\\"", "datasource": "git-tags", "depName": "vapor/vapor", - "fileReplacePosition": 64, "lookupName": "https://github.com/vapor/vapor.git", }, ], @@ -134,7 +122,6 @@ Object { "currentValue": "...\\"1.2.3\\"", "datasource": "git-tags", "depName": "vapor/vapor", - "fileReplacePosition": 64, "lookupName": "https://github.com/vapor/vapor.git", }, ], @@ -149,7 +136,6 @@ Object { "currentValue": "..<\\"1.2.3\\"", "datasource": "git-tags", "depName": "vapor/vapor", - "fileReplacePosition": 64, "lookupName": "https://github.com/vapor/vapor.git", }, ], diff --git a/lib/manager/swift/extract.ts b/lib/manager/swift/extract.ts index 525cad71fc..1569ee0a5c 100644 --- a/lib/manager/swift/extract.ts +++ b/lib/manager/swift/extract.ts @@ -146,36 +146,31 @@ export function extractPackageFile( }; const deps: PackageDependency[] = []; - let offset = 0; let restStr = content; let state: string = null; let match = getMatch(restStr, state); let lookupName: string = null; let currentValue: string = null; - let fileReplacePosition: number = null; function yieldDep(): void { const depName = getDepName(lookupName); - if (depName && currentValue && fileReplacePosition) { + if (depName && currentValue) { const dep: PackageDependency = { datasource: datasourceGitTags.id, depName, lookupName, currentValue, - fileReplacePosition, }; deps.push(dep); } lookupName = null; currentValue = null; - fileReplacePosition = null; } while (match) { const { idx, len, label, substr } = match; - offset += idx; // eslint-disable-next-line default-case switch (state) { case null: @@ -258,15 +253,12 @@ export function extractPackageFile( yieldDep(); state = null; } else if (label === FROM) { - fileReplacePosition = offset; currentValue = substr; state = '.package(url: [depName], from'; } else if (label === STRING_LITERAL) { - fileReplacePosition = offset; currentValue = substr; state = '.package(url: [depName], [value]'; } else if (label === RANGE_OP) { - fileReplacePosition = offset; currentValue = substr; state = '.package(url: [depName], [rangeFrom][rangeOp]'; } else if (label === EXACT_VERSION) { @@ -282,7 +274,6 @@ export function extractPackageFile( state = null; } else if (label === STRING_LITERAL) { currentValue = substr.slice(1, substr.length - 1); - fileReplacePosition = offset; yieldDep(); } else if (label === PACKAGE) { yieldDep(); @@ -347,7 +338,6 @@ export function extractPackageFile( } break; } - offset += len; restStr = restStr.slice(idx + len); match = getMatch(restStr, state); } diff --git a/lib/manager/swift/index.spec.ts b/lib/manager/swift/index.spec.ts index 41ee9e93eb..c82e5f7af5 100644 --- a/lib/manager/swift/index.spec.ts +++ b/lib/manager/swift/index.spec.ts @@ -1,7 +1,6 @@ import { readFileSync } from 'fs'; import { resolve } from 'path'; import { extractPackageFile } from './extract'; -import { updateDependency } from './update'; const pkgContent = readFileSync( resolve(__dirname, `./__fixtures__/SamplePackage.swift`), @@ -137,75 +136,4 @@ describe('lib/manager/swift', () => { expect(extractPackageFile(pkgContent)).toMatchSnapshot(); }); }); - describe('updateDependency()', () => { - it('updates successfully', () => { - [ - [ - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git",.exact("1.2.3")]', - '1.2.4', - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git",.exact("1.2.4")]', - ], - [ - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", from: "1.2.3")]', - '1.2.4', - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", from: "1.2.4")]', - ], - [ - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", "1.2.3"..."1.2.4")]', - '"1.2.3"..."1.2.5"', - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", "1.2.3"..."1.2.5")]', - ], - [ - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", "1.2.3"..<"1.2.4")]', - '"1.2.3"..<"1.2.5"', - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", "1.2.3"..<"1.2.5")]', - ], - [ - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", ..."1.2.4")]', - '..."1.2.5"', - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", ..."1.2.5")]', - ], - [ - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", ..<"1.2.4")]', - '..<"1.2.5"', - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git", ..<"1.2.5")]', - ], - ].forEach(([content, newValue, result]) => { - const { deps } = extractPackageFile(content); - const [dep] = deps; - const upgrade = { ...dep, newValue }; - const updated = updateDependency({ - fileContent: content, - upgrade, - }); - expect(updated).toEqual(result); - }); - }); - it('returns content if already updated', () => { - const content = - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git",.exact("1.2.3")]'; - const currentValue = '1.2.3'; - const newValue = '1.2.4'; - const { deps } = extractPackageFile(content); - const [dep] = deps; - const upgrade = { ...dep, newValue }; - const replaced = content.replace(currentValue, newValue); - const updated = updateDependency({ - fileContent: replaced, - upgrade, - }); - expect(updated).toBe(replaced); - }); - it('returns null if content is different', () => { - const content = - 'dependencies:[.package(url:"https://github.com/vapor/vapor.git",.exact("1.2.3")]'; - const currentValue = '1.2.3'; - const newValue = '1.2.4'; - const { deps } = extractPackageFile(content); - const [dep] = deps; - const upgrade = { ...dep, newValue }; - const replaced = content.replace(currentValue, '1.2.5'); - expect(updateDependency({ fileContent: replaced, upgrade })).toBe(null); - }); - }); }); diff --git a/lib/manager/swift/index.ts b/lib/manager/swift/index.ts index 3ed2e6a32c..b94f2f434b 100644 --- a/lib/manager/swift/index.ts +++ b/lib/manager/swift/index.ts @@ -1,7 +1,8 @@ import * as swiftVersioning from '../../versioning/swift'; export { extractPackageFile } from './extract'; -export { updateDependency } from './update'; + +export const autoReplace = true; export const defaultConfig = { fileMatch: ['(^|/)Package\\.swift'], diff --git a/lib/manager/swift/update.ts b/lib/manager/swift/update.ts deleted file mode 100644 index 6700cec41c..0000000000 --- a/lib/manager/swift/update.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { isVersion } from '../../versioning/swift'; -import { UpdateDependencyConfig } from '../common'; - -const fromParam = /^\s*from\s*:\s*"([^"]+)"\s*$/; - -export function updateDependency({ - fileContent, - upgrade, -}: UpdateDependencyConfig): string | null { - const { currentValue, newValue, fileReplacePosition } = upgrade; - const leftPart = fileContent.slice(0, fileReplacePosition); - const rightPart = fileContent.slice(fileReplacePosition); - const oldVal = isVersion(currentValue) ? `"${currentValue}"` : currentValue; - let newVal; - if (fromParam.test(oldVal)) { - const [, version] = fromParam.exec(oldVal); - newVal = oldVal.replace(version, newValue); - } else if (isVersion(newValue)) { - newVal = `"${newValue}"`; - } else { - newVal = newValue; - } - if (rightPart.startsWith(oldVal)) { - return leftPart + rightPart.replace(oldVal, newVal); - } - if (rightPart.startsWith(newVal)) { - return fileContent; - } - return null; -} diff --git a/lib/versioning/swift/index.spec.ts b/lib/versioning/swift/index.spec.ts index 3c5b9f0694..7ccd7dc03d 100644 --- a/lib/versioning/swift/index.spec.ts +++ b/lib/versioning/swift/index.spec.ts @@ -4,6 +4,7 @@ import { RangeStrategy } from '..'; const { getNewValue, isValid, + isVersion, minSatisfyingVersion, maxSatisfyingVersion, isLessThanRange, @@ -11,6 +12,10 @@ const { } = swift; describe('isValid(input)', () => { + it('supports isVersion', () => { + expect(isVersion('from: "1.2.3"')).toBe(false); + expect(isVersion('1.2.3')).toBe(true); + }); it('understands Swift version ranges', () => { expect(isValid('from: "1.2.3"')).toBe(true); expect(isValid('from : "1.2.3"')).toBe(true); -- GitLab