From 4537ec1cf0ef47da14f85d39f4081da69eabd2d7 Mon Sep 17 00:00:00 2001
From: Joshua Gleitze <dev@joshuagleitze.de>
Date: Wed, 18 Mar 2020 10:57:15 +0200
Subject: [PATCH] =?UTF-8?q?refactor(gradle-wrapper):=20Extract=20Regexes?=
 =?UTF-8?q?=20&=20Named=20Capturing=20Gro=E2=80=A6=20(#5742)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/manager/gradle-wrapper/extract.ts | 18 +++++++++---------
 lib/manager/gradle-wrapper/search.ts  |  2 ++
 lib/manager/gradle-wrapper/update.ts  |  5 +++--
 3 files changed, 14 insertions(+), 11 deletions(-)
 create mode 100644 lib/manager/gradle-wrapper/search.ts

diff --git a/lib/manager/gradle-wrapper/extract.ts b/lib/manager/gradle-wrapper/extract.ts
index 8bf89004a1..334bbeb599 100644
--- a/lib/manager/gradle-wrapper/extract.ts
+++ b/lib/manager/gradle-wrapper/extract.ts
@@ -3,6 +3,7 @@ import { logger } from '../../logger';
 import { PackageFile, PackageDependency } from '../common';
 import * as semverVersioning from '../../versioning/semver';
 import * as datasourceGradleVersion from '../../datasource/gradle-version';
+import { DISTRIBUTION_CHECKSUM_REGEX, DISTRIBUTION_URL_REGEX } from './search';
 
 export function extractPackageFile(fileContent: string): PackageFile | null {
   logger.debug('gradle-wrapper.extractPackageFile()');
@@ -10,24 +11,23 @@ export function extractPackageFile(fileContent: string): PackageFile | null {
 
   let lineNumber = 0;
   for (const line of lines) {
-    const match = /^distributionUrl\s*=\s*\S*-((\d|\.)+)-(bin|all)\.zip\s*$/.exec(
-      line
-    );
-    if (match) {
+    const distributionUrlMatch = DISTRIBUTION_URL_REGEX.exec(line);
+    if (distributionUrlMatch) {
       const dependency: PackageDependency = {
         datasource: datasourceGradleVersion.id,
         depType: 'gradle-wrapper',
         depName: 'gradle',
-        currentValue: coerce(match[1]).toString(),
-        managerData: { lineNumber, gradleWrapperType: match[3] },
+        currentValue: coerce(distributionUrlMatch.groups.version).toString(),
+        managerData: {
+          lineNumber,
+          gradleWrapperType: distributionUrlMatch.groups.type,
+        },
         versioning: semverVersioning.id,
       };
 
       let shaLineNumber = 0;
       for (const shaLine of lines) {
-        const shaMatch = /^distributionSha256Sum\s*=\s*((\w){64}).*$/.test(
-          shaLine
-        );
+        const shaMatch = DISTRIBUTION_CHECKSUM_REGEX.test(shaLine);
         if (shaMatch) {
           dependency.managerData.checksumLineNumber = shaLineNumber;
           break;
diff --git a/lib/manager/gradle-wrapper/search.ts b/lib/manager/gradle-wrapper/search.ts
new file mode 100644
index 0000000000..d046f3e2d1
--- /dev/null
+++ b/lib/manager/gradle-wrapper/search.ts
@@ -0,0 +1,2 @@
+export const DISTRIBUTION_URL_REGEX = /^(?<assignment>distributionUrl\s*=\s*)\S*-(?<version>(\d|\.)+)-(?<type>bin|all)\.zip\s*$/;
+export const DISTRIBUTION_CHECKSUM_REGEX = /^(?<assignment>distributionSha256Sum\s*=\s*)(?<checksum>(\w){64}).*$/;
diff --git a/lib/manager/gradle-wrapper/update.ts b/lib/manager/gradle-wrapper/update.ts
index fd9685a3fd..4911d45d37 100644
--- a/lib/manager/gradle-wrapper/update.ts
+++ b/lib/manager/gradle-wrapper/update.ts
@@ -1,6 +1,7 @@
 import got from '../../util/got';
 import { logger } from '../../logger';
 import { UpdateDependencyConfig } from '../common';
+import { DISTRIBUTION_CHECKSUM_REGEX, DISTRIBUTION_URL_REGEX } from './search';
 
 function replaceType(url: string): string {
   return url.replace('bin', 'all');
@@ -40,12 +41,12 @@ export async function updateDependency({
 
     lines[upgrade.managerData.lineNumber] = lines[
       upgrade.managerData.lineNumber
-    ].replace(/(distributionUrl\s*=\s*)\S*/, `$1${downloadUrl}`);
+    ].replace(DISTRIBUTION_URL_REGEX, `$<assignment>${downloadUrl}`);
 
     if (upgrade.managerData.checksumLineNumber) {
       lines[upgrade.managerData.checksumLineNumber] = lines[
         upgrade.managerData.checksumLineNumber
-      ].replace(/(distributionSha256Sum\s*=\s*)\S*/, `$1${checksum}`);
+      ].replace(DISTRIBUTION_CHECKSUM_REGEX, `$<assignment>${checksum}`);
     }
     // TODO: insert if not present
 
-- 
GitLab