From 00bf898cd77612340655c9729ea66bb1da964012 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 14 Apr 2020 22:31:35 +0200
Subject: [PATCH] refactor: simplify autoreplace data (#5965)

---
 lib/manager/ansible-galaxy/index.ts           |  2 -
 lib/manager/buildkite/index.ts                |  2 -
 lib/manager/cdnurl/index.ts                   |  2 -
 lib/manager/common.ts                         | 10 +---
 lib/manager/composer/index.ts                 |  1 -
 lib/manager/deps-edn/index.ts                 |  2 -
 lib/manager/gitlabci-include/index.ts         |  2 -
 .../html/__snapshots__/extract.spec.ts.snap   | 54 ++++++------------
 lib/manager/html/extract.ts                   |  8 +--
 lib/manager/html/index.ts                     |  2 -
 lib/manager/index.spec.ts                     |  3 -
 lib/manager/kustomize/index.ts                |  2 -
 lib/manager/leiningen/index.ts                |  2 -
 lib/manager/nodenv/index.ts                   |  2 -
 lib/manager/nuget/index.ts                    |  2 -
 lib/manager/nvm/index.ts                      |  2 -
 lib/manager/pip_requirements/index.ts         |  2 -
 lib/manager/pip_setup/index.ts                |  2 -
 lib/manager/pub/index.ts                      |  2 -
 .../regex/__snapshots__/index.spec.ts.snap    | 56 ++++++-------------
 lib/manager/regex/index.ts                    |  9 +--
 lib/manager/ruby-version/index.ts             |  1 -
 lib/manager/sbt/index.ts                      |  2 -
 lib/manager/swift/index.ts                    |  2 -
 lib/manager/terraform/index.ts                |  2 -
 lib/workers/branch/auto-replace.spec.ts       | 22 +++-----
 lib/workers/branch/auto-replace.ts            | 21 ++-----
 lib/workers/branch/get-updated.spec.ts        | 14 ++---
 lib/workers/branch/get-updated.ts             |  7 +--
 .../__snapshots__/manager-files.spec.ts.snap  | 11 +---
 .../repository/extract/manager-files.spec.ts  |  2 +-
 .../repository/extract/manager-files.ts       | 11 +---
 32 files changed, 62 insertions(+), 202 deletions(-)

diff --git a/lib/manager/ansible-galaxy/index.ts b/lib/manager/ansible-galaxy/index.ts
index 912d1c9518..844df06481 100644
--- a/lib/manager/ansible-galaxy/index.ts
+++ b/lib/manager/ansible-galaxy/index.ts
@@ -2,8 +2,6 @@ import extractPackageFile from './extract';
 
 export { extractPackageFile };
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)requirements\\.ya?ml$'],
 };
diff --git a/lib/manager/buildkite/index.ts b/lib/manager/buildkite/index.ts
index f5e32ab955..b11a9d6f82 100644
--- a/lib/manager/buildkite/index.ts
+++ b/lib/manager/buildkite/index.ts
@@ -2,8 +2,6 @@ import { extractPackageFile } from './extract';
 
 export { extractPackageFile };
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['buildkite\\.ya?ml', '\\.buildkite/.+\\.ya?ml$'],
   commitMessageTopic: 'buildkite plugin {{depName}}',
diff --git a/lib/manager/cdnurl/index.ts b/lib/manager/cdnurl/index.ts
index db62cd6974..edf2106e65 100644
--- a/lib/manager/cdnurl/index.ts
+++ b/lib/manager/cdnurl/index.ts
@@ -3,8 +3,6 @@ import { extractPackageFile } from './extract';
 
 export { extractPackageFile };
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: [],
   versioning: semverVersioning.id,
diff --git a/lib/manager/common.ts b/lib/manager/common.ts
index 9ef2e8e488..88aa5d8415 100644
--- a/lib/manager/common.ts
+++ b/lib/manager/common.ts
@@ -75,7 +75,6 @@ export interface NpmLockFiles {
 export interface PackageFile<T = Record<string, any>>
   extends NpmLockFiles,
     ManagerData<T> {
-  autoReplace?: boolean;
   hasYarnWorkspaces?: boolean;
   internalPackages?: string[];
   compatibility?: Record<string, string>;
@@ -126,11 +125,6 @@ export interface Package<T> extends ManagerData<T> {
   prettyDepType?: any;
 }
 
-export interface AutoReplaceData {
-  replaceString: string;
-  depIndex?: number;
-}
-
 export interface LookupUpdate {
   blockedByPin?: boolean;
   branchName?: string;
@@ -174,7 +168,8 @@ export interface PackageDependency<T = Record<string, any>> extends Package<T> {
   toVersion?: string;
   updates?: LookupUpdate[];
   versionLine?: number;
-  autoReplaceData?: AutoReplaceData;
+  replaceString?: string;
+  depIndex?: number;
 }
 
 export interface Upgrade<T = Record<string, any>>
@@ -225,7 +220,6 @@ export interface UpdateDependencyConfig {
 
 export interface ManagerApi {
   defaultConfig: object;
-  autoReplace?: boolean;
   language?: string;
   supportsLockFileMaintenance?: boolean;
 
diff --git a/lib/manager/composer/index.ts b/lib/manager/composer/index.ts
index 5ef43c3178..68451b7c53 100644
--- a/lib/manager/composer/index.ts
+++ b/lib/manager/composer/index.ts
@@ -6,7 +6,6 @@ import * as composerVersioning from '../../versioning/composer';
 
 const language = LANGUAGE_PHP;
 export const supportsLockFileMaintenance = true;
-export const autoReplace = true;
 
 export { extractPackageFile, updateArtifacts, language, getRangeStrategy };
 
diff --git a/lib/manager/deps-edn/index.ts b/lib/manager/deps-edn/index.ts
index 5f9ee54da3..25df409449 100644
--- a/lib/manager/deps-edn/index.ts
+++ b/lib/manager/deps-edn/index.ts
@@ -3,8 +3,6 @@ import { extractPackageFile } from './extract';
 
 export { extractPackageFile };
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)deps\\.edn$'],
   versioning: mavenVersioning.id,
diff --git a/lib/manager/gitlabci-include/index.ts b/lib/manager/gitlabci-include/index.ts
index fd9741711b..5b104316c6 100644
--- a/lib/manager/gitlabci-include/index.ts
+++ b/lib/manager/gitlabci-include/index.ts
@@ -2,8 +2,6 @@ import { extractPackageFile } from './extract';
 
 export { extractPackageFile };
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['^\\.gitlab-ci\\.yml$'],
 };
diff --git a/lib/manager/html/__snapshots__/extract.spec.ts.snap b/lib/manager/html/__snapshots__/extract.spec.ts.snap
index 019f09b047..5554308518 100644
--- a/lib/manager/html/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/html/__snapshots__/extract.spec.ts.snap
@@ -4,102 +4,82 @@ exports[`manager/html/extract extractPackageFile 1`] = `
 Object {
   "deps": Array [
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script type=\\"text/javascript\\"
-            src=\\"https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.1/prop-types.min.js\\">",
-      },
       "currentValue": "15.6.1",
       "datasource": "cdnjs",
       "depName": "prop-types",
       "lookupName": "prop-types/prop-types.min.js",
+      "replaceString": "<script type=\\"text/javascript\\"
+            src=\\"https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.1/prop-types.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script type=\\"text/javascript\\"
-            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react/16.3.2/umd/react.production.min.js\\">",
-      },
       "currentValue": "16.3.2",
       "datasource": "cdnjs",
       "depName": "react",
       "lookupName": "react/umd/react.production.min.js",
+      "replaceString": "<script type=\\"text/javascript\\"
+            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react/16.3.2/umd/react.production.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script type=\\"text/javascript\\"
-            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.3.2/umd/react-dom.production.min.js\\">",
-      },
       "currentValue": "16.3.2",
       "datasource": "cdnjs",
       "depName": "react-dom",
       "lookupName": "react-dom/umd/react-dom.production.min.js",
+      "replaceString": "<script type=\\"text/javascript\\"
+            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.3.2/umd/react-dom.production.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script type=\\"text/javascript\\"
-            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-transition-group/2.2.1/react-transition-group.min.js\\">",
-      },
       "currentValue": "2.2.1",
       "datasource": "cdnjs",
       "depName": "react-transition-group",
       "lookupName": "react-transition-group/react-transition-group.min.js",
+      "replaceString": "<script type=\\"text/javascript\\"
+            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-transition-group/2.2.1/react-transition-group.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script type=\\"text/javascript\\"
-            src=\\"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js\\">",
-      },
       "currentValue": "1.14.3",
       "datasource": "cdnjs",
       "depName": "popper.js",
       "lookupName": "popper.js/umd/popper.min.js",
+      "replaceString": "<script type=\\"text/javascript\\"
+            src=\\"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script type=\\"text/javascript\\"
-            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-popper/0.10.4/umd/react-popper.min.js\\">",
-      },
       "currentValue": "0.10.4",
       "datasource": "cdnjs",
       "depName": "react-popper",
       "lookupName": "react-popper/umd/react-popper.min.js",
+      "replaceString": "<script type=\\"text/javascript\\"
+            src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-popper/0.10.4/umd/react-popper.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js\\">",
-      },
       "currentValue": "7.1.0",
       "datasource": "cdnjs",
       "depName": "reactstrap",
       "lookupName": "reactstrap/reactstrap.min.js",
+      "replaceString": "<script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script src=\\" https://cdnjs.cloudflare.com/ajax/libs/react-router/4.3.1/react-router.min.js\\">",
-      },
       "currentValue": "4.3.1",
       "datasource": "cdnjs",
       "depName": "react-router",
       "lookupName": "react-router/react-router.min.js",
+      "replaceString": "<script src=\\" https://cdnjs.cloudflare.com/ajax/libs/react-router/4.3.1/react-router.min.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-markdown/4.0.6/react-markdown.js\\">",
-      },
       "currentValue": "4.0.6",
       "datasource": "cdnjs",
       "depName": "react-markdown",
       "lookupName": "react-markdown/react-markdown.js",
+      "replaceString": "<script src=\\"https://cdnjs.cloudflare.com/ajax/libs/react-markdown/4.0.6/react-markdown.js\\">",
     },
     Object {
-      "autoReplaceData": Object {
-        "replaceString": "<script src=\\"https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js\\"
-            integrity=\\"sha256-mpnrJ5DpEZZkwkE1ZgkEQQJW/46CSEh/STrZKOB/qoM=\\" crossorigin=\\"anonymous\\">",
-      },
       "currentDigest": "sha256-mpnrJ5DpEZZkwkE1ZgkEQQJW/46CSEh/STrZKOB/qoM=",
       "currentValue": "0.18.0",
       "datasource": "cdnjs",
       "depName": "axios",
       "lookupName": "axios/axios.min.js",
+      "replaceString": "<script src=\\"https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js\\"
+            integrity=\\"sha256-mpnrJ5DpEZZkwkE1ZgkEQQJW/46CSEh/STrZKOB/qoM=\\" crossorigin=\\"anonymous\\">",
     },
   ],
 }
diff --git a/lib/manager/html/extract.ts b/lib/manager/html/extract.ts
index d9ec262dd2..6a5c891898 100644
--- a/lib/manager/html/extract.ts
+++ b/lib/manager/html/extract.ts
@@ -17,6 +17,7 @@ export function extractDep(tag: string): PackageDependency | null {
     depName,
     lookupName: `${depName}/${asset}`,
     currentValue,
+    replaceString: tag,
   };
   const integrityMatch = integrityRegex.exec(tag);
   if (integrityMatch) {
@@ -37,12 +38,7 @@ export function extractPackageFile(content: string): PackageFile {
     match = regex.exec(rest);
     const dep = extractDep(replaceString);
     if (dep) {
-      deps.push({
-        ...dep,
-        autoReplaceData: {
-          replaceString,
-        },
-      });
+      deps.push(dep);
     }
   }
   if (!deps.length) {
diff --git a/lib/manager/html/index.ts b/lib/manager/html/index.ts
index 058367de68..5b05144ecd 100644
--- a/lib/manager/html/index.ts
+++ b/lib/manager/html/index.ts
@@ -3,8 +3,6 @@ import * as semverVersioning from '../../versioning/semver';
 
 export { extractPackageFile };
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['\\.html?$'],
   versioning: semverVersioning.id,
diff --git a/lib/manager/index.spec.ts b/lib/manager/index.spec.ts
index 06fb46d227..f8cbb1229d 100644
--- a/lib/manager/index.spec.ts
+++ b/lib/manager/index.spec.ts
@@ -24,9 +24,6 @@ describe('manager', () => {
       if (!module.defaultConfig) {
         return false;
       }
-      if (!module.updateDependency && !module.autoReplace) {
-        return false;
-      }
       if (!module.extractPackageFile && !module.extractAllPackageFiles) {
         return false;
       }
diff --git a/lib/manager/kustomize/index.ts b/lib/manager/kustomize/index.ts
index ce5bdde2f0..c76d0f9977 100644
--- a/lib/manager/kustomize/index.ts
+++ b/lib/manager/kustomize/index.ts
@@ -1,7 +1,5 @@
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)kustomization\\.yaml'],
 };
diff --git a/lib/manager/leiningen/index.ts b/lib/manager/leiningen/index.ts
index b5e2f90033..f501592d2c 100644
--- a/lib/manager/leiningen/index.ts
+++ b/lib/manager/leiningen/index.ts
@@ -2,8 +2,6 @@ import * as mavenVersioning from '../../versioning/maven';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)project\\.clj$'],
   versioning: mavenVersioning.id,
diff --git a/lib/manager/nodenv/index.ts b/lib/manager/nodenv/index.ts
index 80a723945f..f1298b8370 100644
--- a/lib/manager/nodenv/index.ts
+++ b/lib/manager/nodenv/index.ts
@@ -3,8 +3,6 @@ import * as nodeVersioning from '../../versioning/node';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const language = LANGUAGE_NODE;
 
 export const defaultConfig = {
diff --git a/lib/manager/nuget/index.ts b/lib/manager/nuget/index.ts
index 7dc18d87a8..f42cb60352 100644
--- a/lib/manager/nuget/index.ts
+++ b/lib/manager/nuget/index.ts
@@ -2,8 +2,6 @@ import { LANGUAGE_DOT_NET } from '../../constants/languages';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const language = LANGUAGE_DOT_NET;
 
 export const defaultConfig = {
diff --git a/lib/manager/nvm/index.ts b/lib/manager/nvm/index.ts
index 39baa77b42..5780252f18 100644
--- a/lib/manager/nvm/index.ts
+++ b/lib/manager/nvm/index.ts
@@ -3,8 +3,6 @@ import * as nodeVersioning from '../../versioning/node';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const language = LANGUAGE_NODE;
 
 export const defaultConfig = {
diff --git a/lib/manager/pip_requirements/index.ts b/lib/manager/pip_requirements/index.ts
index 5c9b729050..3b321a2fc9 100644
--- a/lib/manager/pip_requirements/index.ts
+++ b/lib/manager/pip_requirements/index.ts
@@ -5,8 +5,6 @@ export { getRangeStrategy } from './range';
 
 export const language = LANGUAGE_PYTHON;
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)([\\w-]*)requirements.(txt|pip)$'],
 };
diff --git a/lib/manager/pip_setup/index.ts b/lib/manager/pip_setup/index.ts
index 854761c722..30d0b4489f 100644
--- a/lib/manager/pip_setup/index.ts
+++ b/lib/manager/pip_setup/index.ts
@@ -4,8 +4,6 @@ export { extractPackageFile } from './extract';
 
 export const language = LANGUAGE_PYTHON;
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)setup.py$'],
 };
diff --git a/lib/manager/pub/index.ts b/lib/manager/pub/index.ts
index 245129a5d6..dcdceecd7f 100644
--- a/lib/manager/pub/index.ts
+++ b/lib/manager/pub/index.ts
@@ -2,8 +2,6 @@ import * as npmVersioning from '../../versioning/npm';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)pubspec\\.ya?ml$'],
   versioning: npmVersioning.id,
diff --git a/lib/manager/regex/__snapshots__/index.spec.ts.snap b/lib/manager/regex/__snapshots__/index.spec.ts.snap
index 5aa0872b4c..90ed65cf6c 100644
--- a/lib/manager/regex/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/regex/__snapshots__/index.spec.ts.snap
@@ -4,91 +4,67 @@ exports[`manager/regex/index extracts multiple dependencies 1`] = `
 Object {
   "deps": Array [
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 0,
-        "replaceString": "ENV GRADLE_VERSION=6.2 # gradle-version/gradle&versioning=maven
-",
-      },
       "currentValue": "6.2",
       "datasource": "gradle-version",
       "depName": "gradle",
+      "replaceString": "ENV GRADLE_VERSION=6.2 # gradle-version/gradle&versioning=maven
+",
       "versioning": "maven",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 1,
-        "replaceString": "ENV NODE_VERSION=10.19.0 # github-tags/nodejs/node&versioning=node
-",
-      },
       "currentValue": "10.19.0",
       "datasource": "github-tags",
       "depName": "nodejs/node",
+      "replaceString": "ENV NODE_VERSION=10.19.0 # github-tags/nodejs/node&versioning=node
+",
       "versioning": "node",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 2,
-        "replaceString": "ENV COMPOSER_VERSION=1.9.3 # github-releases/composer/composer
-",
-      },
       "currentValue": "1.9.3",
       "datasource": "github-releases",
       "depName": "composer/composer",
+      "replaceString": "ENV COMPOSER_VERSION=1.9.3 # github-releases/composer/composer
+",
       "versioning": "semver",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 3,
-        "replaceString": "ENV COCOAPODS_VERSION=1.9.0 # rubygems/cocoapods&versioning=ruby
-",
-      },
       "currentValue": "1.9.0",
       "datasource": "rubygems",
       "depName": "cocoapods",
+      "replaceString": "ENV COCOAPODS_VERSION=1.9.0 # rubygems/cocoapods&versioning=ruby
+",
       "versioning": "ruby",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 4,
-        "replaceString": "ENV DOCKER_VERSION=19.03.1 # github-releases/docker/docker-ce&versioning=docker
-",
-      },
       "currentValue": "19.03.1",
       "datasource": "github-releases",
       "depName": "docker/docker-ce",
+      "replaceString": "ENV DOCKER_VERSION=19.03.1 # github-releases/docker/docker-ce&versioning=docker
+",
       "versioning": "docker",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 5,
-        "replaceString": "ENV POETRY_VERSION=1.0.0 # github-releases/python-poetry/poetry
-",
-      },
       "currentValue": "1.0.0",
       "datasource": "github-releases",
       "depName": "python-poetry/poetry",
+      "replaceString": "ENV POETRY_VERSION=1.0.0 # github-releases/python-poetry/poetry
+",
       "versioning": "semver",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 6,
-        "replaceString": "ENV NPM_VERSION=6.10.2 # npm/npm
-",
-      },
       "currentValue": "6.10.2",
       "datasource": "npm",
       "depName": "npm",
+      "replaceString": "ENV NPM_VERSION=6.10.2 # npm/npm
+",
       "versioning": "semver",
     },
     Object {
-      "autoReplaceData": Object {
-        "depIndex": 7,
-        "replaceString": "ENV YARN_VERSION=1.19.1 # npm/yarn
-",
-      },
       "currentValue": "1.19.1",
       "datasource": "npm",
       "depName": "yarn",
+      "replaceString": "ENV YARN_VERSION=1.19.1 # npm/yarn
+",
       "versioning": "semver",
     },
   ],
diff --git a/lib/manager/regex/index.ts b/lib/manager/regex/index.ts
index 93dfd2265a..3c0cff43bc 100644
--- a/lib/manager/regex/index.ts
+++ b/lib/manager/regex/index.ts
@@ -3,8 +3,6 @@ import { CustomExtractConfig, PackageFile, Result } from '../common';
 import { regEx } from '../../util/regex';
 import { logger } from '../../logger';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   pinDigests: false,
 };
@@ -17,7 +15,6 @@ export function extractPackageFile(
   const regexMatch = regEx(config.matchStrings[0], 'g');
   const deps = [];
   let matchResult;
-  let depIndex = 0;
   do {
     matchResult = regexMatch.exec(content);
     if (matchResult) {
@@ -47,13 +44,9 @@ export function extractPackageFile(
           dep[field] = groups[field];
         }
       }
-      dep.autoReplaceData = {
-        depIndex,
-        replaceString: `${matchResult[0]}`,
-      };
+      dep.replaceString = `${matchResult[0]}`;
       deps.push(dep);
     }
-    depIndex += 1;
   } while (matchResult);
   if (deps.length) {
     return { deps, matchStrings: config.matchStrings };
diff --git a/lib/manager/ruby-version/index.ts b/lib/manager/ruby-version/index.ts
index 17619c7d64..8f9b439c4d 100644
--- a/lib/manager/ruby-version/index.ts
+++ b/lib/manager/ruby-version/index.ts
@@ -3,7 +3,6 @@ import * as rubyVersioning from '../../versioning/ruby';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
 export const language = LANGUAGE_RUBY;
 
 export const defaultConfig = {
diff --git a/lib/manager/sbt/index.ts b/lib/manager/sbt/index.ts
index 424d3cecf4..e587990399 100644
--- a/lib/manager/sbt/index.ts
+++ b/lib/manager/sbt/index.ts
@@ -2,8 +2,6 @@ import * as ivyVersioning from '../../versioning/ivy';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['\\.sbt$', 'project/[^/]*.scala$'],
   versioning: ivyVersioning.id,
diff --git a/lib/manager/swift/index.ts b/lib/manager/swift/index.ts
index b94f2f434b..e9102b4cf2 100644
--- a/lib/manager/swift/index.ts
+++ b/lib/manager/swift/index.ts
@@ -2,8 +2,6 @@ import * as swiftVersioning from '../../versioning/swift';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   fileMatch: ['(^|/)Package\\.swift'],
   versioning: swiftVersioning.id,
diff --git a/lib/manager/terraform/index.ts b/lib/manager/terraform/index.ts
index 1fc4cbb4a2..7e21d3abf6 100644
--- a/lib/manager/terraform/index.ts
+++ b/lib/manager/terraform/index.ts
@@ -2,8 +2,6 @@ import * as hashicorpVersioning from '../../versioning/hashicorp';
 
 export { extractPackageFile } from './extract';
 
-export const autoReplace = true;
-
 export const defaultConfig = {
   commitMessageTopic:
     'Terraform {{managerData.terraformDependencyType}} {{depNameShort}}',
diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts
index c0c5941adf..ba7b8ffcbd 100644
--- a/lib/workers/branch/auto-replace.spec.ts
+++ b/lib/workers/branch/auto-replace.spec.ts
@@ -47,9 +47,7 @@ describe('workers/branch/auto-replace', () => {
       upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js';
       upgrade.currentValue = '7.1.0';
       upgrade.newValue = '7.1.1';
-      upgrade.autoReplaceData = {
-        depIndex: 0,
-      };
+      upgrade.depIndex = 0;
       const res = await doAutoReplace(upgrade, src, parentBranch);
       expect(res).toMatchSnapshot();
     });
@@ -62,10 +60,8 @@ describe('workers/branch/auto-replace', () => {
       upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js';
       upgrade.currentValue = '7.1.0';
       upgrade.newValue = '7.1.1';
-      upgrade.autoReplaceData = {
-        depIndex: 0,
-        replaceString: script,
-      };
+      upgrade.depIndex = 0;
+      upgrade.replaceString = script;
       parentBranch = 'something';
       const srcAlreadyUpdated = src.replace('7.1.0', '7.1.1');
       const res = await doAutoReplace(upgrade, srcAlreadyUpdated, parentBranch);
@@ -80,10 +76,8 @@ describe('workers/branch/auto-replace', () => {
       upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js';
       upgrade.currentValue = '7.1.0';
       upgrade.newValue = '7.1.1';
-      upgrade.autoReplaceData = {
-        depIndex: 0,
-        replaceString: script,
-      };
+      upgrade.depIndex = 0;
+      upgrade.replaceString = script;
       const res = await doAutoReplace(upgrade, 'wrong source', parentBranch);
       expect(res).toEqual('wrong source');
     });
@@ -99,10 +93,8 @@ describe('workers/branch/auto-replace', () => {
         'sha384-K3vbOmF2BtaVai+Qk37uypf7VrgBubhQreNQe9aGsz9lB63dIFiQVlJbr92dw2Lx';
       upgrade.newValue = '0.11.1';
       upgrade.newDigest = 'sha256-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-      upgrade.autoReplaceData = {
-        depIndex: 0,
-        replaceString: script,
-      };
+      upgrade.depIndex = 0;
+      upgrade.replaceString = script;
       const res = await doAutoReplace(upgrade, src, parentBranch);
       expect(res).toMatchSnapshot();
     });
diff --git a/lib/workers/branch/auto-replace.ts b/lib/workers/branch/auto-replace.ts
index a0f4b18d34..3db55742f6 100644
--- a/lib/workers/branch/auto-replace.ts
+++ b/lib/workers/branch/auto-replace.ts
@@ -8,13 +8,7 @@ export async function confirmIfDepUpdated(
   upgrade,
   newContent: string
 ): Promise<boolean> {
-  const {
-    manager,
-    packageFile,
-    newValue,
-    newDigest,
-    autoReplaceData,
-  } = upgrade;
+  const { manager, packageFile, newValue, newDigest, depIndex } = upgrade;
   const extractPackageFile = get(manager, 'extractPackageFile');
   let newUpgrade;
   try {
@@ -23,7 +17,7 @@ export async function confirmIfDepUpdated(
       packageFile,
       upgrade
     );
-    newUpgrade = newExtract.deps[autoReplaceData.depIndex];
+    newUpgrade = newExtract.deps[depIndex];
   } catch (err) /* istanbul ignore next */ {
     logger.debug('Failed to parse newContent');
   }
@@ -77,15 +71,8 @@ export async function doAutoReplace(
     logger.debug('Branch dep is already updated');
     return existingContent;
   }
-  const {
-    depName,
-    currentValue,
-    newValue,
-    currentDigest,
-    newDigest,
-    autoReplaceData,
-  } = upgrade;
-  const replaceString = autoReplaceData?.replaceString || currentValue;
+  const { depName, currentValue, newValue, currentDigest, newDigest } = upgrade;
+  const replaceString = upgrade.replaceString || currentValue;
   logger.trace({ depName, replaceString }, 'autoReplace replaceString');
   let searchIndex = existingContent.indexOf(replaceString);
   if (searchIndex === -1) {
diff --git a/lib/workers/branch/get-updated.spec.ts b/lib/workers/branch/get-updated.spec.ts
index b7b958a410..a1cc12e821 100644
--- a/lib/workers/branch/get-updated.spec.ts
+++ b/lib/workers/branch/get-updated.spec.ts
@@ -28,25 +28,25 @@ describe('workers/branch/get-updated', () => {
       platform.getFile.mockResolvedValueOnce('existing content');
     });
     it('handles autoreplace base updated', async () => {
-      config.upgrades.push({ manager: 'html', autoReplace: true });
+      config.upgrades.push({ manager: 'html' });
       autoReplace.doAutoReplace.mockResolvedValueOnce('updated-file');
       const res = await getUpdatedPackageFiles(config);
       expect(res).toMatchSnapshot();
     });
     it('handles autoreplace branch no update', async () => {
-      config.upgrades.push({ manager: 'html', autoReplace: true });
+      config.upgrades.push({ manager: 'html' });
       autoReplace.doAutoReplace.mockResolvedValueOnce('existing content');
       const res = await getUpdatedPackageFiles(config);
       expect(res).toMatchSnapshot();
     });
     it('handles autoreplace failure', async () => {
-      config.upgrades.push({ manager: 'html', autoReplace: true });
+      config.upgrades.push({ manager: 'html' });
       autoReplace.doAutoReplace.mockResolvedValueOnce(null);
       await expect(getUpdatedPackageFiles(config)).rejects.toThrow();
     });
     it('handles autoreplace branch needs update', async () => {
       config.parentBranch = 'some branch';
-      config.upgrades.push({ manager: 'html', autoReplace: true });
+      config.upgrades.push({ manager: 'html' });
       autoReplace.doAutoReplace.mockResolvedValueOnce(null);
       autoReplace.doAutoReplace.mockResolvedValueOnce('updated-file');
       const res = await getUpdatedPackageFiles(config);
@@ -86,9 +86,6 @@ describe('workers/branch/get-updated', () => {
           },
         },
       ]);
-      config.upgrades.forEach((upgrade) => {
-        upgrade.autoReplace = true; // eslint-disable-line no-param-reassign
-      });
       const res = await getUpdatedPackageFiles(config);
       expect(res).toMatchSnapshot();
     });
@@ -140,9 +137,6 @@ describe('workers/branch/get-updated', () => {
           },
         },
       ]);
-      config.upgrades.forEach((upgrade) => {
-        upgrade.autoReplace = true; // eslint-disable-line no-param-reassign
-      });
       const res = await getUpdatedPackageFiles(config);
       expect(res).toMatchSnapshot();
     });
diff --git a/lib/workers/branch/get-updated.ts b/lib/workers/branch/get-updated.ts
index dcd65dcc78..51390eba93 100644
--- a/lib/workers/branch/get-updated.ts
+++ b/lib/workers/branch/get-updated.ts
@@ -26,7 +26,7 @@ export async function getUpdatedPackageFiles(
   const packageFileUpdatedDeps: Record<string, string[]> = {};
   const lockFileMaintenanceFiles = [];
   for (const upgrade of config.upgrades) {
-    const { autoReplace, manager, packageFile, depName } = upgrade;
+    const { manager, packageFile, depName } = upgrade;
     packageFileManagers[packageFile] = manager;
     packageFileUpdatedDeps[packageFile] =
       packageFileUpdatedDeps[packageFile] || [];
@@ -45,8 +45,8 @@ export async function getUpdatedPackageFiles(
           parentBranch: undefined,
         });
       }
-      if (autoReplace) {
-        logger.debug('autoReplace');
+      const updateDependency = get(manager, 'updateDependency');
+      if (!updateDependency) {
         const res = await doAutoReplace(upgrade, existingContent, parentBranch);
         if (res) {
           if (res === existingContent) {
@@ -65,7 +65,6 @@ export async function getUpdatedPackageFiles(
         logger.error('Could not autoReplace');
         throw new Error(WORKER_FILE_UPDATE_FAILED);
       }
-      const updateDependency = get(manager, 'updateDependency');
       const newContent = await updateDependency({
         fileContent: existingContent,
         upgrade,
diff --git a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
index a22dac8a35..50b14424a3 100644
--- a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
+++ b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap
@@ -26,18 +26,13 @@ Array [
 exports[`workers/repository/extract/manager-files getManagerPackageFiles() returns files with extractPackageFile 1`] = `
 Array [
   Object {
-    "autoReplace": true,
     "deps": Array [
       Object {
-        "autoReplaceData": Object {
-          "depIndex": 0,
-        },
+        "depIndex": 0,
       },
       Object {
-        "autoReplaceData": Object {
-          "depIndex": 1,
-          "replaceString": "abc",
-        },
+        "depIndex": 1,
+        "replaceString": "abc",
       },
     ],
     "manager": "html",
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index b6bca450b2..ee3420fe2d 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -39,7 +39,7 @@ describe('workers/repository/extract/manager-files', () => {
       fileMatch.getMatchingFiles.mockReturnValue(['Dockerfile']);
       platform.getFile.mockResolvedValue('some content');
       html.extractPackageFile = jest.fn(() => ({
-        deps: [{}, { autoReplaceData: { replaceString: 'abc' } }],
+        deps: [{}, { replaceString: 'abc' }],
       })) as never;
       const res = await getManagerPackageFiles(managerConfig);
       expect(res).toMatchSnapshot();
diff --git a/lib/workers/repository/extract/manager-files.ts b/lib/workers/repository/extract/manager-files.ts
index be7910c5c9..c9544472f3 100644
--- a/lib/workers/repository/extract/manager-files.ts
+++ b/lib/workers/repository/extract/manager-files.ts
@@ -49,15 +49,8 @@ export async function getManagerPackageFiles(config): Promise<PackageFile[]> {
         config
       );
       if (res) {
-        if (get(manager, 'autoReplace')) {
-          res.autoReplace = true;
-          for (let index = 0; index < res.deps.length; index += 1) {
-            // auto-populate the depIndex value
-            res.deps[index].autoReplaceData = {
-              ...res.deps[index].autoReplaceData,
-              depIndex: index,
-            };
-          }
+        for (let index = 0; index < res.deps.length; index += 1) {
+          res.deps[index].depIndex = index;
         }
         packageFiles.push({
           packageFile,
-- 
GitLab