From 8d0aa39920bf004efa957a09cb8a9bd1ee624f23 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 24 Nov 2019 08:43:24 +0100
Subject: [PATCH] refactor(eslint):
 '@typescript-eslint/explicit-function-return-type' improvements

---
 lib/config/.eslintrc.js                       |  5 +++
 lib/config/cli.ts                             |  8 ++--
 lib/config/definitions.ts                     |  2 +-
 lib/config/env.ts                             |  8 ++--
 lib/config/presets.ts                         |  2 +-
 lib/logger/__mocks__/index.ts                 |  2 +-
 lib/logger/index.ts                           |  4 +-
 lib/logger/pretty-stdout.ts                   |  6 +--
 lib/platform/index.ts                         |  4 +-
 lib/platform/utils/read-only-issue-body.ts    |  2 +-
 lib/renovate.ts                               |  2 +-
 lib/util/.eslintrc.js                         |  5 +++
 lib/util/emoji.ts                             |  2 +-
 lib/util/got/stats.ts                         |  4 +-
 lib/util/host-rules.ts                        | 36 +++++++++---------
 lib/util/regex.ts                             |  2 +-
 lib/util/sanitize.ts                          |  6 +--
 lib/versioning/.eslintrc.js                   |  5 +++
 lib/versioning/cargo/index.ts                 | 25 ++++++------
 lib/versioning/composer/index.ts              | 34 ++++++++---------
 lib/versioning/docker/index.ts                |  8 ++--
 lib/versioning/hashicorp/index.ts             | 15 ++++----
 lib/versioning/hex/index.ts                   | 17 +++++----
 lib/versioning/ivy/index.ts                   |  4 +-
 lib/versioning/loose/generic.ts               | 34 +++++++++--------
 lib/versioning/loose/index.ts                 |  4 +-
 lib/versioning/maven/compare.ts               | 38 +++++++++----------
 lib/versioning/maven/index.ts                 |  8 ++--
 lib/versioning/node/index.ts                  |  2 +-
 lib/versioning/npm/index.ts                   |  6 +--
 lib/versioning/npm/range.ts                   |  2 +-
 lib/versioning/nuget/index.ts                 |  6 +--
 lib/versioning/pep440/index.ts                | 10 ++---
 lib/versioning/pep440/range.ts                |  4 +-
 lib/versioning/poetry/index.ts                | 25 ++++++------
 lib/versioning/regex/index.ts                 |  2 +-
 lib/versioning/ruby/index.ts                  | 31 +++++++--------
 lib/versioning/ruby/operator.ts               |  5 ++-
 lib/versioning/ruby/range.ts                  |  2 +-
 lib/versioning/ruby/strategies/bump.ts        |  2 +-
 lib/versioning/ruby/strategies/pin.ts         |  2 +-
 lib/versioning/ruby/strategies/replace.ts     |  2 +-
 lib/versioning/ruby/version.ts                | 12 +++---
 lib/versioning/semver/index.ts                |  4 +-
 lib/versioning/swift/index.ts                 | 12 +++---
 lib/versioning/swift/range.ts                 |  4 +-
 lib/workers/branch/schedule.ts                |  2 +-
 lib/workers/branch/status-checks.ts           |  4 +-
 lib/workers/global/limits.ts                  |  8 ++--
 .../repository/onboarding/branch/check.ts     |  8 +++-
 .../repository/process/lookup/index.ts        |  2 +-
 lib/workers/repository/updates/branchify.ts   |  5 ++-
 lib/workers/repository/updates/flatten.ts     |  2 +-
 lib/workers/repository/updates/generate.ts    |  8 +++-
 test/.eslintrc.js                             |  1 +
 test/static-files.spec.ts                     |  4 +-
 test/website-docs.spec.ts                     |  6 ++-
 57 files changed, 257 insertions(+), 218 deletions(-)
 create mode 100644 lib/config/.eslintrc.js
 create mode 100644 lib/util/.eslintrc.js
 create mode 100644 lib/versioning/.eslintrc.js

diff --git a/lib/config/.eslintrc.js b/lib/config/.eslintrc.js
new file mode 100644
index 0000000000..8bcc65cc06
--- /dev/null
+++ b/lib/config/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+  rules: {
+    '@typescript-eslint/explicit-function-return-type': 2,
+  },
+};
diff --git a/lib/config/cli.ts b/lib/config/cli.ts
index 7666b70f7b..bd5153ce3d 100644
--- a/lib/config/cli.ts
+++ b/lib/config/cli.ts
@@ -33,7 +33,7 @@ export function getConfig(input: string[]): RenovateCliConfig {
   const config: RenovateCliConfig = {};
 
   const coersions = {
-    boolean: (val: string) => {
+    boolean: (val: string): boolean => {
       if (val === 'true' || val === '') return true;
       if (val === 'false') return false;
       throw new Error(
@@ -42,7 +42,7 @@ export function getConfig(input: string[]): RenovateCliConfig {
           "'"
       );
     },
-    array: (val: string) => {
+    array: (val: string): string[] => {
       if (val === '') {
         return [];
       }
@@ -52,7 +52,7 @@ export function getConfig(input: string[]): RenovateCliConfig {
         return val.split(',').map(el => el.trim());
       }
     },
-    object: (val: string) => {
+    object: (val: string): any => {
       if (val === '') {
         return {};
       }
@@ -62,7 +62,7 @@ export function getConfig(input: string[]): RenovateCliConfig {
         throw new Error("Invalid JSON value: '" + val + "'");
       }
     },
-    string: (val: string) => val,
+    string: (val: string): string => val,
     integer: parseInt,
   };
 
diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts
index 15886aa93a..ddb37f960a 100644
--- a/lib/config/definitions.ts
+++ b/lib/config/definitions.ts
@@ -2041,6 +2041,6 @@ const options: RenovateOptions[] = [
   },
 ];
 
-export function getOptions() {
+export function getOptions(): any {
   return options;
 }
diff --git a/lib/config/env.ts b/lib/config/env.ts
index e6250321e7..3000b62904 100644
--- a/lib/config/env.ts
+++ b/lib/config/env.ts
@@ -18,10 +18,10 @@ export function getConfig(env: NodeJS.ProcessEnv): RenovateConfig {
   const config: RenovateConfig = { hostRules: [] };
 
   const coersions = {
-    boolean: (val: string) => val === 'true',
-    array: (val: string) => val.split(',').map(el => el.trim()),
-    string: (val: string) => val.replace(/\\n/g, '\n'),
-    object: (val: string) => JSON.parse(val),
+    boolean: (val: string): boolean => val === 'true',
+    array: (val: string): string[] => val.split(',').map(el => el.trim()),
+    string: (val: string): string => val.replace(/\\n/g, '\n'),
+    object: (val: string): any => JSON.parse(val),
     integer: parseInt,
   };
 
diff --git a/lib/config/presets.ts b/lib/config/presets.ts
index 48062a6410..d2672521b6 100644
--- a/lib/config/presets.ts
+++ b/lib/config/presets.ts
@@ -18,7 +18,7 @@ const datasources = {
 export function replaceArgs(
   obj: string | string[] | object | object[],
   argMapping: Record<string, any>
-) {
+): any {
   if (is.string(obj)) {
     let returnStr = obj;
     for (const [arg, argVal] of Object.entries(argMapping)) {
diff --git a/lib/logger/__mocks__/index.ts b/lib/logger/__mocks__/index.ts
index b303a70ad2..36b7185649 100644
--- a/lib/logger/__mocks__/index.ts
+++ b/lib/logger/__mocks__/index.ts
@@ -16,6 +16,6 @@ loggerLevels.forEach(k => {
 export const setMeta = jest.fn();
 export const levels = jest.fn();
 export const addStream = jest.fn();
-export const getErrors = () => [];
+export const getErrors = (): any[] => [];
 
 export { logger };
diff --git a/lib/logger/index.ts b/lib/logger/index.ts
index 9b838a1924..ec499ade79 100644
--- a/lib/logger/index.ts
+++ b/lib/logger/index.ts
@@ -98,7 +98,7 @@ loggerLevels.forEach(loggerLevel => {
 });
 
 // setMeta overrides existing meta
-export function setMeta(obj: any) {
+export function setMeta(obj: any): void {
   meta = { ...obj };
 }
 
@@ -112,6 +112,6 @@ export function levels(name: string, level: bunyan.LogLevel): void {
   bunyanLogger.levels(name, level);
 }
 
-export function getErrors() {
+export function getErrors(): any {
   return errors.getErrors();
 }
diff --git a/lib/logger/pretty-stdout.ts b/lib/logger/pretty-stdout.ts
index 318a528d0b..f4becca043 100644
--- a/lib/logger/pretty-stdout.ts
+++ b/lib/logger/pretty-stdout.ts
@@ -35,12 +35,12 @@ const levels: Record<number, string> = {
   60: chalk.bgRed('FATAL'),
 };
 
-export function indent(str: string, leading = false) {
+export function indent(str: string, leading = false): string {
   const prefix = leading ? '       ' : '';
   return prefix + str.split(/\r?\n/).join('\n       ');
 }
 
-export function getMeta(rec: BunyanRecord) {
+export function getMeta(rec: BunyanRecord): string {
   if (!rec) {
     return '';
   }
@@ -56,7 +56,7 @@ export function getMeta(rec: BunyanRecord) {
   return chalk.gray(res);
 }
 
-export function getDetails(rec: BunyanRecord) {
+export function getDetails(rec: BunyanRecord): string {
   if (!rec) {
     return '';
   }
diff --git a/lib/platform/index.ts b/lib/platform/index.ts
index 60ccc5d709..7d335490f0 100644
--- a/lib/platform/index.ts
+++ b/lib/platform/index.ts
@@ -36,7 +36,9 @@ export async function setPlatformApi(name: string): Promise<void> {
   _platform = await import('./' + name);
 }
 
-export async function initPlatform(config: RenovateConfig) {
+export async function initPlatform(
+  config: RenovateConfig
+): Promise<RenovateConfig> {
   await setPlatformApi(config.platform);
   // TODO: types
   const platformInfo = await platform.initPlatform(config);
diff --git a/lib/platform/utils/read-only-issue-body.ts b/lib/platform/utils/read-only-issue-body.ts
index 4f9959b628..56813a3415 100644
--- a/lib/platform/utils/read-only-issue-body.ts
+++ b/lib/platform/utils/read-only-issue-body.ts
@@ -1,4 +1,4 @@
-export function readOnlyIssueBody(body: string) {
+export function readOnlyIssueBody(body: string): string {
   return body
     .replace(' only once you click their checkbox below', '')
     .replace(' unless you click a checkbox below', '')
diff --git a/lib/renovate.ts b/lib/renovate.ts
index e44bbd478f..cd4a703202 100644
--- a/lib/renovate.ts
+++ b/lib/renovate.ts
@@ -5,6 +5,6 @@ import * as globalWorker from './workers/global';
 
 proxy.bootstrap();
 
-(async () => {
+(async (): Promise<void> => {
   process.exitCode = await globalWorker.start();
 })();
diff --git a/lib/util/.eslintrc.js b/lib/util/.eslintrc.js
new file mode 100644
index 0000000000..8bcc65cc06
--- /dev/null
+++ b/lib/util/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+  rules: {
+    '@typescript-eslint/explicit-function-return-type': 2,
+  },
+};
diff --git a/lib/util/emoji.ts b/lib/util/emoji.ts
index d27b3baf45..98bb118575 100644
--- a/lib/util/emoji.ts
+++ b/lib/util/emoji.ts
@@ -3,7 +3,7 @@ import { RenovateConfig } from '../config';
 
 let unicodeEmoji = false;
 
-export function setEmojiConfig(_config: RenovateConfig) {
+export function setEmojiConfig(_config: RenovateConfig): void {
   unicodeEmoji = _config.unicodeEmoji;
 }
 
diff --git a/lib/util/got/stats.ts b/lib/util/got/stats.ts
index 9e4826173b..2217781fb2 100644
--- a/lib/util/got/stats.ts
+++ b/lib/util/got/stats.ts
@@ -11,12 +11,12 @@ interface HostStats {
 let stats: Record<string, number[]> = {};
 
 // istanbul ignore next
-export const resetStats = () => {
+export const resetStats = (): void => {
   stats = {};
 };
 
 // istanbul ignore next
-export const printStats = () => {
+export const printStats = (): void => {
   logger.trace({ stats }, 'Host transfer stats (milliseconds)');
   const hostStats: Record<string, HostStats> = {};
   for (const [hostname, entries] of Object.entries(stats)) {
diff --git a/lib/util/host-rules.ts b/lib/util/host-rules.ts
index 09f02a8a1f..451f5f8f20 100644
--- a/lib/util/host-rules.ts
+++ b/lib/util/host-rules.ts
@@ -18,7 +18,7 @@ export interface HostRule {
 
 let hostRules: HostRule[] = [];
 
-export function add(params: HostRule) {
+export function add(params: HostRule): void {
   if (params.domainName && params.hostName) {
     throw new Error('hostRules cannot contain both a domainName and hostName');
   }
@@ -47,35 +47,35 @@ export interface HostRuleSearch {
   url?: string;
 }
 
-function isEmptyRule(rule: HostRule) {
+function isEmptyRule(rule: HostRule): boolean {
   return !rule.hostType && !rule.domainName && !rule.hostName && !rule.baseUrl;
 }
 
-function isHostTypeRule(rule: HostRule) {
+function isHostTypeRule(rule: HostRule): boolean {
   return rule.hostType && !rule.domainName && !rule.hostName && !rule.baseUrl;
 }
 
-function isDomainNameRule(rule: HostRule) {
-  return !rule.hostType && rule.domainName;
+function isDomainNameRule(rule: HostRule): boolean {
+  return !rule.hostType && !!rule.domainName;
 }
 
-function isHostNameRule(rule: HostRule) {
-  return !rule.hostType && rule.hostName;
+function isHostNameRule(rule: HostRule): boolean {
+  return !rule.hostType && !!rule.hostName;
 }
 
-function isBaseUrlRule(rule: HostRule) {
-  return !rule.hostType && rule.baseUrl;
+function isBaseUrlRule(rule: HostRule): boolean {
+  return !rule.hostType && !!rule.baseUrl;
 }
 
-function isMultiRule(rule: HostRule) {
-  return rule.hostType && (rule.domainName || rule.hostName || rule.baseUrl);
+function isMultiRule(rule: HostRule): boolean {
+  return rule.hostType && !!(rule.domainName || rule.hostName || rule.baseUrl);
 }
 
-function matchesHostType(rule: HostRule, search: HostRuleSearch) {
+function matchesHostType(rule: HostRule, search: HostRuleSearch): boolean {
   return rule.hostType === search.hostType;
 }
 
-function matchesDomainName(rule: HostRule, search: HostRuleSearch) {
+function matchesDomainName(rule: HostRule, search: HostRuleSearch): boolean {
   const hostname = search.url && URL.parse(search.url).hostname;
   return (
     search.url &&
@@ -85,7 +85,7 @@ function matchesDomainName(rule: HostRule, search: HostRuleSearch) {
   );
 }
 
-function matchesHostName(rule: HostRule, search: HostRuleSearch) {
+function matchesHostName(rule: HostRule, search: HostRuleSearch): boolean {
   return (
     search.url &&
     rule.hostName &&
@@ -93,11 +93,11 @@ function matchesHostName(rule: HostRule, search: HostRuleSearch) {
   );
 }
 
-function matchesBaseUrl(rule: HostRule, search: HostRuleSearch) {
+function matchesBaseUrl(rule: HostRule, search: HostRuleSearch): boolean {
   return search.url && rule.baseUrl && search.url.startsWith(rule.baseUrl);
 }
 
-export function find(search: HostRuleSearch) {
+export function find(search: HostRuleSearch): HostRule {
   if (!(search.hostType || search.url)) {
     logger.warn({ search }, 'Invalid hostRules search');
     return {};
@@ -153,7 +153,7 @@ export function find(search: HostRuleSearch) {
   return res;
 }
 
-export function hosts({ hostType }: { hostType: string }) {
+export function hosts({ hostType }: { hostType: string }): string[] {
   return hostRules
     .filter(rule => rule.hostType === hostType)
     .map(rule => {
@@ -164,7 +164,7 @@ export function hosts({ hostType }: { hostType: string }) {
     .filter(Boolean);
 }
 
-export function clear() {
+export function clear(): void {
   hostRules = [];
   sanitize.clear();
 }
diff --git a/lib/util/regex.ts b/lib/util/regex.ts
index 3094b008a1..41dfce98f1 100644
--- a/lib/util/regex.ts
+++ b/lib/util/regex.ts
@@ -14,7 +14,7 @@ try {
   RegEx = RegExp;
 }
 
-export function regEx(pattern: string, flags?: string) {
+export function regEx(pattern: string, flags?: string): RegExp {
   try {
     return new RegEx(pattern, flags);
   } catch (err) {
diff --git a/lib/util/sanitize.ts b/lib/util/sanitize.ts
index 98d6b737c1..c132400979 100644
--- a/lib/util/sanitize.ts
+++ b/lib/util/sanitize.ts
@@ -1,6 +1,6 @@
 const secrets = new Set<string>();
 
-export function sanitize(input: string) {
+export function sanitize(input: string): string {
   if (!input) return input;
   let output: string = input;
   secrets.forEach(secret => {
@@ -11,10 +11,10 @@ export function sanitize(input: string) {
   return output;
 }
 
-export function add(secret: string) {
+export function add(secret: string): void {
   secrets.add(secret);
 }
 
-export function clear() {
+export function clear(): void {
   secrets.clear();
 }
diff --git a/lib/versioning/.eslintrc.js b/lib/versioning/.eslintrc.js
new file mode 100644
index 0000000000..8bcc65cc06
--- /dev/null
+++ b/lib/versioning/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+  rules: {
+    '@typescript-eslint/explicit-function-return-type': 2,
+  },
+};
diff --git a/lib/versioning/cargo/index.ts b/lib/versioning/cargo/index.ts
index a33f78be12..50847c56b2 100644
--- a/lib/versioning/cargo/index.ts
+++ b/lib/versioning/cargo/index.ts
@@ -1,9 +1,9 @@
 import { api as npm } from '../npm';
 import { VersioningApi, RangeStrategy } from '../common';
 
-const isVersion = (input: string) => npm.isVersion(input);
+const isVersion = (input: string): string | boolean => npm.isVersion(input);
 
-function convertToCaret(item: string) {
+function convertToCaret(item: string): string {
   // In Cargo, "1.2.3" doesn't mean exactly 1.2.3, it means >= 1.2.3 < 2.0.0
   if (isVersion(item)) {
     // NOTE: Partial versions like '1.2' don't get converted to '^1.2'
@@ -14,17 +14,17 @@ function convertToCaret(item: string) {
   return item.trim();
 }
 
-function cargo2npm(input: string) {
+function cargo2npm(input: string): string {
   let versions = input.split(',');
   versions = versions.map(convertToCaret);
   return versions.join(' ');
 }
 
-function notEmpty(s: string) {
+function notEmpty(s: string): boolean {
   return s !== '';
 }
 
-function npm2cargo(input: string) {
+function npm2cargo(input: string): string {
   // Note: this doesn't remove the ^
   const res = input
     .split(' ')
@@ -40,21 +40,22 @@ function npm2cargo(input: string) {
   return res.join(', ');
 }
 
-const isLessThanRange = (version: string, range: string) =>
+const isLessThanRange = (version: string, range: string): boolean =>
   npm.isLessThanRange(version, cargo2npm(range));
 
-export const isValid = (input: string) => npm.isValid(cargo2npm(input));
+export const isValid = (input: string): string | boolean =>
+  npm.isValid(cargo2npm(input));
 
-const matches = (version: string, range: string) =>
+const matches = (version: string, range: string): boolean =>
   npm.matches(version, cargo2npm(range));
 
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   npm.maxSatisfyingVersion(versions, cargo2npm(range));
 
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   npm.minSatisfyingVersion(versions, cargo2npm(range));
 
-const isSingleVersion = (constraint: string) =>
+const isSingleVersion = (constraint: string): string | boolean =>
   constraint.trim().startsWith('=') &&
   isVersion(
     constraint
@@ -68,7 +69,7 @@ function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   if (rangeStrategy === 'pin' || isSingleVersion(currentValue)) {
     let res = '=';
     if (currentValue.startsWith('= ')) {
diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts
index bdbb52de71..c5880f4a91 100644
--- a/lib/versioning/composer/index.ts
+++ b/lib/versioning/composer/index.ts
@@ -3,7 +3,7 @@ import { logger } from '../../logger';
 import { api as npm } from '../npm';
 import { VersioningApi, RangeStrategy } from '../common';
 
-function padZeroes(input: string) {
+function padZeroes(input: string): string {
   const sections = input.split('.');
   while (sections.length < 3) {
     sections.push('0');
@@ -11,7 +11,7 @@ function padZeroes(input: string) {
   return sections.join('.');
 }
 
-function composer2npm(input: string) {
+function composer2npm(input: string): string {
   if (npm.isVersion(input)) {
     return input;
   }
@@ -26,43 +26,43 @@ function composer2npm(input: string) {
   return output;
 }
 
-const equals = (a: string, b: string) =>
+const equals = (a: string, b: string): boolean =>
   npm.equals(composer2npm(a), composer2npm(b));
 
-const getMajor = (version: string) =>
+const getMajor = (version: string): number =>
   npm.getMajor(coerce(composer2npm(version)));
 
-const getMinor = (version: string) =>
+const getMinor = (version: string): number =>
   npm.getMinor(coerce(composer2npm(version)));
 
-const getPatch = (version: string) =>
+const getPatch = (version: string): number =>
   npm.getPatch(coerce(composer2npm(version)));
 
-const isGreaterThan = (a: string, b: string) =>
+const isGreaterThan = (a: string, b: string): boolean =>
   npm.isGreaterThan(composer2npm(a), composer2npm(b));
 
-const isLessThanRange = (version: string, range: string) =>
+const isLessThanRange = (version: string, range: string): boolean =>
   npm.isLessThanRange(composer2npm(version), composer2npm(range));
 
-const isSingleVersion = (input: string) =>
+const isSingleVersion = (input: string): string | boolean =>
   input && npm.isSingleVersion(composer2npm(input));
 
-const isStable = (version: string) =>
+const isStable = (version: string): boolean =>
   version && npm.isStable(composer2npm(version));
 
-export const isValid = (input: string) =>
+export const isValid = (input: string): string | boolean =>
   input && npm.isValid(composer2npm(input));
 
-export const isVersion = (input: string) =>
+export const isVersion = (input: string): string | boolean =>
   input && npm.isVersion(composer2npm(input));
 
-const matches = (version: string, range: string) =>
+const matches = (version: string, range: string): boolean =>
   npm.matches(composer2npm(version), composer2npm(range));
 
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   npm.maxSatisfyingVersion(versions.map(composer2npm), composer2npm(range));
 
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   npm.minSatisfyingVersion(versions.map(composer2npm), composer2npm(range));
 
 function getNewValue(
@@ -70,7 +70,7 @@ function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   if (rangeStrategy === 'pin') {
     return toVersion;
   }
@@ -138,7 +138,7 @@ function getNewValue(
   return newValue;
 }
 
-function sortVersions(a: string, b: string) {
+function sortVersions(a: string, b: string): number {
   return npm.sortVersions(composer2npm(a), composer2npm(b));
 }
 
diff --git a/lib/versioning/docker/index.ts b/lib/versioning/docker/index.ts
index 9f7f4ab4c1..00b6f64f08 100644
--- a/lib/versioning/docker/index.ts
+++ b/lib/versioning/docker/index.ts
@@ -1,7 +1,7 @@
 import * as generic from '../loose/generic';
 import { VersioningApi } from '../common';
 
-function parse(version: string) {
+function parse(version: string): any {
   const versionPieces = version.replace(/^v/, '').split('-');
   const prefix = versionPieces.shift();
   const suffix = versionPieces.join('-');
@@ -12,12 +12,12 @@ function parse(version: string) {
   return { release, suffix };
 }
 
-function valueToVersion(value: string) {
+function valueToVersion(value: string): string {
   // Remove any suffix after '-', e.g. '-alpine'
   return value ? value.split('-')[0] : value;
 }
 
-function compare(version1: string, vervion2: string) {
+function compare(version1: string, vervion2: string): number {
   const parsed1 = parse(version1);
   const parsed2 = parse(vervion2);
   // istanbul ignore if
@@ -43,7 +43,7 @@ function compare(version1: string, vervion2: string) {
   return parsed2.suffix.localeCompare(parsed1.suffix);
 }
 
-function isCompatible(version: string, range: string) {
+function isCompatible(version: string, range: string): boolean {
   const parsed1 = parse(version);
   const parsed2 = parse(range);
   return (
diff --git a/lib/versioning/hashicorp/index.ts b/lib/versioning/hashicorp/index.ts
index 5ed2786188..f29b5ee4b0 100644
--- a/lib/versioning/hashicorp/index.ts
+++ b/lib/versioning/hashicorp/index.ts
@@ -1,23 +1,24 @@
 import { api as npm } from '../npm';
 import { VersioningApi, RangeStrategy } from '../common';
 
-function hashicorp2npm(input: string) {
+function hashicorp2npm(input: string): string {
   // The only case incompatible with semver is a "short" ~>, e.g. ~> 1.2
   return input.replace(/~>(\s*\d+\.\d+$)/, '^$1').replace(',', '');
 }
 
-const isLessThanRange = (version: string, range: string) =>
+const isLessThanRange = (version: string, range: string): boolean =>
   npm.isLessThanRange(hashicorp2npm(version), hashicorp2npm(range));
 
-export const isValid = (input: string) => npm.isValid(hashicorp2npm(input));
+export const isValid = (input: string): string | boolean =>
+  npm.isValid(hashicorp2npm(input));
 
-const matches = (version: string, range: string) =>
+const matches = (version: string, range: string): boolean =>
   npm.matches(hashicorp2npm(version), hashicorp2npm(range));
 
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   npm.maxSatisfyingVersion(versions.map(hashicorp2npm), hashicorp2npm(range));
 
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   npm.minSatisfyingVersion(versions.map(hashicorp2npm), hashicorp2npm(range));
 
 function getNewValue(
@@ -25,7 +26,7 @@ function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   // handle specia. ~> 1.2 case
   if (currentValue.match(/(~>\s*)\d+\.\d+$/)) {
     return currentValue.replace(
diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts
index a6e396fb93..4f7b9a20f9 100644
--- a/lib/versioning/hex/index.ts
+++ b/lib/versioning/hex/index.ts
@@ -1,7 +1,7 @@
 import { api as npm } from '../npm';
 import { VersioningApi, RangeStrategy } from '../common';
 
-function hex2npm(input: string) {
+function hex2npm(input: string): string {
   return input
     .replace(/~>\s*(\d+\.\d+)$/, '^$1')
     .replace(/~>\s*(\d+\.\d+\.\d+)/, '~$1')
@@ -10,7 +10,7 @@ function hex2npm(input: string) {
     .replace(/!=\s*(\d+\.\d+(\.\d+.*)?)/, '>$1 <$1');
 }
 
-function npm2hex(input: string) {
+function npm2hex(input: string): string {
   const res = input
     .split(' ')
     .map(str => str.trim())
@@ -31,18 +31,19 @@ function npm2hex(input: string) {
   return output;
 }
 
-const isLessThanRange = (version: string, range: string) =>
+const isLessThanRange = (version: string, range: string): boolean =>
   npm.isLessThanRange(hex2npm(version), hex2npm(range));
 
-const isValid = (input: string) => npm.isValid(hex2npm(input));
+const isValid = (input: string): string | boolean =>
+  npm.isValid(hex2npm(input));
 
-const matches = (version: string, range: string) =>
+const matches = (version: string, range: string): boolean =>
   npm.matches(hex2npm(version), hex2npm(range));
 
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   npm.maxSatisfyingVersion(versions.map(hex2npm), hex2npm(range));
 
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   npm.minSatisfyingVersion(versions.map(hex2npm), hex2npm(range));
 
 const getNewValue = (
@@ -50,7 +51,7 @@ const getNewValue = (
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) => {
+): string => {
   let newSemver = npm.getNewValue(
     hex2npm(currentValue),
     rangeStrategy,
diff --git a/lib/versioning/ivy/index.ts b/lib/versioning/ivy/index.ts
index 68d516c882..7f273001e6 100644
--- a/lib/versioning/ivy/index.ts
+++ b/lib/versioning/ivy/index.ts
@@ -22,14 +22,14 @@ const {
   sortVersions,
 } = maven;
 
-function isVersion(str: string) {
+function isVersion(str: string): string | boolean {
   if (!str) {
     return false;
   }
   return isSingleVersion(str) || !!parseDynamicRevision(str);
 }
 
-function matches(a: string, b: string) {
+function matches(a: string, b: string): boolean {
   if (!a) return false;
   if (!b) return false;
   const dynamicRevision = parseDynamicRevision(b);
diff --git a/lib/versioning/loose/generic.ts b/lib/versioning/loose/generic.ts
index bec102da62..ce5c09d199 100644
--- a/lib/versioning/loose/generic.ts
+++ b/lib/versioning/loose/generic.ts
@@ -16,34 +16,38 @@ export interface VersionComparator {
 // parse should return null if version not valid
 // parse should return an object with property release, an array of version sections major.minor.patch
 export const parser = (parse: VersionParser): Partial<VersioningApi> => {
-  function isValid(version: string) {
+  function isValid(version: string): string {
     if (!version) {
       return null;
     }
     const parsed = parse(version);
     return parsed ? version : null;
   }
-  function getSection(version: string, index: number) {
+  function getSection(version: string, index: number): number {
     const parsed = parse(version);
     return parsed && parsed.release.length > index
       ? parsed.release[index]
       : null;
   }
-  function getMajor(version: string) {
+  function getMajor(version: string): number {
     return getSection(version, 0);
   }
-  function getMinor(version: string) {
+  function getMinor(version: string): number {
     return getSection(version, 1);
   }
-  function getPatch(version: string) {
+  function getPatch(version: string): number {
     return getSection(version, 2);
   }
 
+  function isStable(version: string): boolean {
+    return !!isValid(version);
+  }
+
   return {
     // validation
     isCompatible: isValid,
     isSingleVersion: isValid,
-    isStable: v => !!isValid(v),
+    isStable,
     isValid,
     isVersion: isValid,
     // digestion of version
@@ -58,22 +62,22 @@ export const parser = (parse: VersionParser): Partial<VersioningApi> => {
 export const comparer = (
   compare: VersionComparator
 ): Partial<VersioningApi> => {
-  function equals(version: string, other: string) {
+  function equals(version: string, other: string): boolean {
     return compare(version, other) === 0;
   }
 
-  function isGreaterThan(version: string, other: string) {
+  function isGreaterThan(version: string, other: string): boolean {
     return compare(version, other) > 0;
   }
-  function isLessThanRange(version: string, range: string) {
+  function isLessThanRange(version: string, range: string): boolean {
     return compare(version, range) < 0;
   }
 
   // we don't not have ranges, so versions has to be equal
-  function maxSatisfyingVersion(versions: string[], range: string) {
+  function maxSatisfyingVersion(versions: string[], range: string): string {
     return versions.find(v => equals(v, range)) || null;
   }
-  function minSatisfyingVersion(versions: string[], range: string) {
+  function minSatisfyingVersion(versions: string[], range: string): string {
     return versions.find(v => equals(v, range)) || null;
   }
   function getNewValue(
@@ -81,10 +85,10 @@ export const comparer = (
     _rangeStrategy: RangeStrategy,
     _fromVersion: string,
     toVersion: string
-  ) {
+  ): string {
     return toVersion;
   }
-  function sortVersions(version: string, other: string) {
+  function sortVersions(version: string, other: string): number {
     return compare(version, other);
   }
 
@@ -108,7 +112,7 @@ export const create = ({
 }: {
   parse: VersionParser;
   compare: VersionComparator;
-}) => {
+}): any => {
   let schema: VersioningApi = {} as any;
   if (parse) {
     schema = { ...schema, ...parser(parse) };
@@ -122,7 +126,7 @@ export const create = ({
 export abstract class GenericVersioningApi<
   T extends GenericVersion = GenericVersion
 > implements VersioningApi {
-  private _getSection(version: string, index: number) {
+  private _getSection(version: string, index: number): number {
     const parsed = this._parse(version);
     return parsed && parsed.release.length > index
       ? parsed.release[index]
diff --git a/lib/versioning/loose/index.ts b/lib/versioning/loose/index.ts
index 9c6f53985b..2f2cf8b0c9 100644
--- a/lib/versioning/loose/index.ts
+++ b/lib/versioning/loose/index.ts
@@ -3,7 +3,7 @@ import { VersioningApi } from '../common';
 
 const pattern = /^v?(\d+(?:\.\d+)*)(.*)$/;
 
-function parse(version: string) {
+function parse(version: string): any {
   const matches = pattern.exec(version);
   if (!matches) {
     return null;
@@ -16,7 +16,7 @@ function parse(version: string) {
   return { release, suffix: suffix || '' };
 }
 
-function compare(version1: string, vervion2: string) {
+function compare(version1: string, vervion2: string): number {
   const parsed1 = parse(version1);
   const parsed2 = parse(vervion2);
   // istanbul ignore if
diff --git a/lib/versioning/maven/compare.ts b/lib/versioning/maven/compare.ts
index 32af458aa7..af22f91bda 100644
--- a/lib/versioning/maven/compare.ts
+++ b/lib/versioning/maven/compare.ts
@@ -23,7 +23,7 @@ export interface QualifierToken extends BaseToken {
 
 export type Token = NumberToken | QualifierToken;
 
-function iterateChars(str: string, cb: (p: string, n: string) => void) {
+function iterateChars(str: string, cb: (p: string, n: string) => void): void {
   let prev = null;
   let next = null;
   for (let i = 0; i < str.length; i += 1) {
@@ -34,26 +34,26 @@ function iterateChars(str: string, cb: (p: string, n: string) => void) {
   cb(prev, null);
 }
 
-function isDigit(char: string) {
+function isDigit(char: string): boolean {
   return /^\d$/.test(char);
 }
 
-function isLetter(char: string) {
+function isLetter(char: string): boolean {
   return /^[a-z]$/i.test(char);
 }
 
-function isTransition(prevChar: string, nextChar: string) {
+function isTransition(prevChar: string, nextChar: string): boolean {
   return (
     (isDigit(prevChar) && isLetter(nextChar)) ||
     (isLetter(prevChar) && isDigit(nextChar))
   );
 }
 
-function iterateTokens(versionStr: string, cb: (token: Token) => void) {
+function iterateTokens(versionStr: string, cb: (token: Token) => void): void {
   let currentPrefix = PREFIX_HYPHEN;
   let currentVal = '';
 
-  function yieldToken(transition = false) {
+  function yieldToken(transition = false): void {
     const val = currentVal || '0';
     if (/^\d+$/.test(val)) {
       cb({
@@ -93,7 +93,7 @@ function iterateTokens(versionStr: string, cb: (token: Token) => void) {
   });
 }
 
-function isNull(token: Token) {
+function isNull(token: Token): boolean {
   const val = token.val;
   return (
     val === 0 ||
@@ -112,7 +112,7 @@ const zeroToken: NumberToken = {
   isTransition: false,
 };
 
-function tokenize(versionStr: string) {
+function tokenize(versionStr: string): Token[] {
   let buf: Token[] = [];
   let result: Token[] = [];
   let leadingZero = true;
@@ -147,7 +147,7 @@ function nullFor(token: Token): Token {
       };
 }
 
-function commonOrder(token: Token) {
+function commonOrder(token: Token): number {
   if (token.prefix === PREFIX_DOT && token.type === TYPE_QUALIFIER) {
     return 0;
   }
@@ -160,7 +160,7 @@ function commonOrder(token: Token) {
   return 3;
 }
 
-function qualifierOrder(token: Token) {
+function qualifierOrder(token: Token): number {
   const val = token.val;
   if (val === 'alpha' || (token.isTransition && val === 'a')) {
     return 1;
@@ -192,7 +192,7 @@ function qualifierOrder(token: Token) {
   return null;
 }
 
-function qualifierCmp(left: Token, right: Token) {
+function qualifierCmp(left: Token, right: Token): number {
   const leftOrder = qualifierOrder(left);
   const rightOrder = qualifierOrder(right);
   if (leftOrder && rightOrder) {
@@ -214,7 +214,7 @@ function qualifierCmp(left: Token, right: Token) {
   return 1;
 }
 
-function tokenCmp(left: Token, right: Token) {
+function tokenCmp(left: Token, right: Token): number {
   if (left.prefix === right.prefix) {
     if (left.type === TYPE_NUMBER && right.type === TYPE_NUMBER) {
       if (left.val === right.val) {
@@ -245,7 +245,7 @@ function tokenCmp(left: Token, right: Token) {
   return 1;
 }
 
-function compare(left: string, right: string) {
+function compare(left: string, right: string): number {
   const leftTokens = tokenize(left);
   const rightTokens = tokenize(right);
   const length = Math.max(leftTokens.length, rightTokens.length);
@@ -258,7 +258,7 @@ function compare(left: string, right: string) {
   return 0;
 }
 
-function isVersion(version: string) {
+function isVersion(version: string): boolean {
   if (!version) return false;
   if (!/^[a-z0-9.-]+$/i.test(version)) return false;
   if (/^[.-]/.test(version)) return false;
@@ -270,7 +270,7 @@ function isVersion(version: string) {
 const INCLUDING_POINT = 'INCLUDING_POINT';
 const EXCLUDING_POINT = 'EXCLUDING_POINT';
 
-function parseRange(rangeStr: string) {
+function parseRange(rangeStr: string): any {
   function emptyInterval(): Range {
     return {
       leftType: null,
@@ -367,7 +367,7 @@ function parseRange(rangeStr: string) {
   );
 }
 
-function isValid(str: string) {
+function isValid(str: string): boolean {
   if (!str) {
     return false;
   }
@@ -386,7 +386,7 @@ export interface Range {
 function rangeToStr(fullRange: Range[]): string | null {
   if (fullRange === null) return null;
 
-  const valToStr = (val: string) => (val === null ? '' : val);
+  const valToStr = (val: string): string => (val === null ? '' : val);
 
   if (fullRange.length === 1) {
     const { leftBracket, rightBracket, leftValue, rightValue } = fullRange[0];
@@ -417,7 +417,7 @@ function autoExtendMavenRange(
 ): string | null {
   const range = parseRange(currentRepresentation);
   if (!range) return currentRepresentation;
-  const isPoint = (vals: Range[]) => {
+  const isPoint = (vals: Range[]): boolean => {
     if (vals.length !== 1) return false;
     const { leftType, leftValue, rightType, rightValue } = vals[0];
     return (
@@ -454,7 +454,7 @@ function autoExtendMavenRange(
   return rangeToStr(range);
 }
 
-function isSubversion(majorVersion: string, minorVersion: string) {
+function isSubversion(majorVersion: string, minorVersion: string): boolean {
   const majorTokens = tokenize(majorVersion);
   const minorTokens = tokenize(minorVersion);
 
diff --git a/lib/versioning/maven/index.ts b/lib/versioning/maven/index.ts
index 645e220608..4cf72ac3ce 100644
--- a/lib/versioning/maven/index.ts
+++ b/lib/versioning/maven/index.ts
@@ -12,14 +12,14 @@ import {
 } from './compare';
 import { RangeStrategy, VersioningApi } from '../common';
 
-const equals = (a: string, b: string) => compare(a, b) === 0;
+const equals = (a: string, b: string): boolean => compare(a, b) === 0;
 
-function matches(a: string, b: string) {
+function matches(a: string, b: string): boolean {
   if (!b) return false;
   if (isVersion(b)) return equals(a, b);
   const ranges = parseRange(b);
   if (!ranges) return false;
-  return ranges.reduce((result, range) => {
+  return ranges.reduce((result, range): any => {
     if (result) return result;
 
     const { leftType, leftValue, rightType, rightValue } = range;
@@ -83,7 +83,7 @@ const getPatch = (version: string): number | null => {
   return null;
 };
 
-const isGreaterThan = (a: string, b: string) => compare(a, b) === 1;
+const isGreaterThan = (a: string, b: string): boolean => compare(a, b) === 1;
 
 const isStable = (version: string): boolean | null => {
   if (isVersion(version)) {
diff --git a/lib/versioning/node/index.ts b/lib/versioning/node/index.ts
index 6a150c5bbf..dcde501adc 100644
--- a/lib/versioning/node/index.ts
+++ b/lib/versioning/node/index.ts
@@ -6,7 +6,7 @@ function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   const res = npm.getNewValue(
     currentValue,
     rangeStrategy,
diff --git a/lib/versioning/npm/index.ts b/lib/versioning/npm/index.ts
index 7f60432699..f78579d9f1 100644
--- a/lib/versioning/npm/index.ts
+++ b/lib/versioning/npm/index.ts
@@ -19,10 +19,10 @@ const {
 } = semver;
 
 // If this is left as an alias, inputs like "17.04.0" throw errors
-export const isValid = (input: string) => validRange(input);
-export const isVersion = (input: string) => valid(input);
+export const isValid = (input: string): string => validRange(input);
+export const isVersion = (input: string): string => valid(input);
 
-const isSingleVersion = (constraint: string) =>
+const isSingleVersion = (constraint: string): string =>
   isVersion(constraint) ||
   (constraint.startsWith('=') && isVersion(constraint.substring(1).trim()));
 
diff --git a/lib/versioning/npm/range.ts b/lib/versioning/npm/range.ts
index 92a3ef86bf..56019cec7e 100644
--- a/lib/versioning/npm/range.ts
+++ b/lib/versioning/npm/range.ts
@@ -16,7 +16,7 @@ export function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   if (rangeStrategy === 'pin' || isVersion(currentValue)) {
     return toVersion;
   }
diff --git a/lib/versioning/nuget/index.ts b/lib/versioning/nuget/index.ts
index dcf6969124..66a420fdd3 100644
--- a/lib/versioning/nuget/index.ts
+++ b/lib/versioning/nuget/index.ts
@@ -3,7 +3,7 @@ import { VersioningApi } from '../common';
 
 const pattern = /^(\d+(?:\.\d+)*)(-[^+]+)?(\+.*)?$/;
 
-function parse(version: string) {
+function parse(version: string): any {
   const matches = pattern.exec(version);
   if (!matches) {
     return null;
@@ -13,7 +13,7 @@ function parse(version: string) {
   return { release, suffix: prereleasesuffix || '' };
 }
 
-function compare(version1: string, vervion2: string) {
+function compare(version1: string, vervion2: string): number {
   const parsed1 = parse(version1);
   const parsed2 = parse(vervion2);
   // istanbul ignore if
@@ -43,7 +43,7 @@ function compare(version1: string, vervion2: string) {
   return suffixComparison;
 }
 
-function isStable(version: string) {
+function isStable(version: string): boolean {
   const parsed = parse(version);
   return parsed && parsed.suffix === '';
 }
diff --git a/lib/versioning/pep440/index.ts b/lib/versioning/pep440/index.ts
index 699fe4a48b..f0bf0b09f1 100644
--- a/lib/versioning/pep440/index.ts
+++ b/lib/versioning/pep440/index.ts
@@ -16,7 +16,7 @@ const {
   eq: equals,
 } = pep440;
 
-const isStable = (input: string) => {
+const isStable = (input: string): boolean => {
   const version = explain(input);
   if (!version) {
     return false;
@@ -25,19 +25,19 @@ const isStable = (input: string) => {
 };
 
 // If this is left as an alias, inputs like "17.04.0" throw errors
-export const isValid = (input: string) => validRange(input);
+export const isValid = (input: string): string => validRange(input);
 
-const maxSatisfyingVersion = (versions: string[], range: string) => {
+const maxSatisfyingVersion = (versions: string[], range: string): string => {
   const found = filter(versions, range).sort(sortVersions);
   return found.length === 0 ? null : found[found.length - 1];
 };
 
-const minSatisfyingVersion = (versions: string[], range: string) => {
+const minSatisfyingVersion = (versions: string[], range: string): string => {
   const found = filter(versions, range).sort(sortVersions);
   return found.length === 0 ? null : found[0];
 };
 
-export const isSingleVersion = (constraint: string) =>
+export const isSingleVersion = (constraint: string): string =>
   isVersion(constraint) ||
   (constraint.startsWith('==') && isVersion(constraint.substring(2).trim()));
 
diff --git a/lib/versioning/pep440/range.ts b/lib/versioning/pep440/range.ts
index 3099407184..fafb81b38b 100644
--- a/lib/versioning/pep440/range.ts
+++ b/lib/versioning/pep440/range.ts
@@ -8,7 +8,7 @@ function getFutureVersion(
   baseVersion: string,
   toVersion: string,
   step: number
-) {
+): string {
   const toRelease: number[] = parseVersion(toVersion).release;
   const baseRelease: number[] = parseVersion(baseVersion).release;
   let found = false;
@@ -40,7 +40,7 @@ export function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   // easy pin
   if (rangeStrategy === 'pin') {
     return '==' + toVersion;
diff --git a/lib/versioning/poetry/index.ts b/lib/versioning/poetry/index.ts
index 6964d671d1..49ec562ff3 100644
--- a/lib/versioning/poetry/index.ts
+++ b/lib/versioning/poetry/index.ts
@@ -3,14 +3,14 @@ import { major, minor } from 'semver';
 import { api as npm } from '../npm';
 import { RangeStrategy, VersioningApi } from '../common';
 
-function notEmpty(s: string) {
+function notEmpty(s: string): boolean {
   return s !== '';
 }
 
 // This function works like cargo2npm, but it doesn't
 // add a '^', because poetry treats versions without operators as
 // exact versions.
-function poetry2npm(input: string) {
+function poetry2npm(input: string): string {
   const versions = input
     .split(',')
     .map(str => str.trim())
@@ -21,7 +21,7 @@ function poetry2npm(input: string) {
 // NOTE: This function is copied from cargo versionsing code.
 // Poetry uses commas (like in cargo) instead of spaces (like in npm)
 // for AND operation.
-function npm2poetry(input: string) {
+function npm2poetry(input: string): string {
   // Note: this doesn't remove the ^
   const res = input
     .split(' ')
@@ -37,22 +37,23 @@ function npm2poetry(input: string) {
   return res.join(', ');
 }
 
-const isLessThanRange = (version: string, range: string) =>
+const isLessThanRange = (version: string, range: string): boolean =>
   npm.isLessThanRange(version, poetry2npm(range));
 
-export const isValid = (input: string) => npm.isValid(poetry2npm(input));
+export const isValid = (input: string): string | boolean =>
+  npm.isValid(poetry2npm(input));
 
-const isVersion = (input: string) => npm.isVersion(input);
-const matches = (version: string, range: string) =>
+const isVersion = (input: string): string | boolean => npm.isVersion(input);
+const matches = (version: string, range: string): boolean =>
   npm.matches(version, poetry2npm(range));
 
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   npm.maxSatisfyingVersion(versions, poetry2npm(range));
 
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   npm.minSatisfyingVersion(versions, poetry2npm(range));
 
-const isSingleVersion = (constraint: string) =>
+const isSingleVersion = (constraint: string): string | boolean =>
   (constraint.trim().startsWith('=') &&
     isVersion(
       constraint
@@ -66,7 +67,7 @@ function handleShort(
   operator: string,
   currentValue: string,
   toVersion: string
-) {
+): string {
   const toVersionMajor = major(toVersion);
   const toVersionMinor = minor(toVersion);
   const split = currentValue.split('.');
@@ -86,7 +87,7 @@ function getNewValue(
   rangeStrategy: RangeStrategy,
   fromVersion: string,
   toVersion: string
-) {
+): string {
   if (rangeStrategy === 'replace') {
     const npmCurrentValue = poetry2npm(currentValue);
     const parsedRange = parseRange(npmCurrentValue);
diff --git a/lib/versioning/regex/index.ts b/lib/versioning/regex/index.ts
index 94395785f4..a841467df5 100644
--- a/lib/versioning/regex/index.ts
+++ b/lib/versioning/regex/index.ts
@@ -113,7 +113,7 @@ export class RegExpVersioningApi extends GenericVersioningApi<RegExpVersion> {
     );
   }
 
-  matches(version: string, range: string) {
+  matches(version: string, range: string): boolean {
     return satisfies(
       asSemver(this._parse(version)),
       asSemver(this._parse(range))
diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts
index 01c230b26b..8389ef7efa 100644
--- a/lib/versioning/ruby/index.ts
+++ b/lib/versioning/ruby/index.ts
@@ -13,17 +13,18 @@ import { parse as parseRange, ltr } from './range';
 import { isSingleOperator, isValidOperator } from './operator';
 import { pin, bump, replace } from './strategies';
 
-const equals = (left: string, right: string) => eq(left, right);
+const equals = (left: string, right: string): boolean => eq(left, right);
 
-const getMajor = (version: string) => parseVersion(version).major;
-const getMinor = (version: string) => parseVersion(version).minor;
-const getPatch = (version: string) => parseVersion(version).patch;
+const getMajor = (version: string): number => parseVersion(version).major;
+const getMinor = (version: string): number => parseVersion(version).minor;
+const getPatch = (version: string): number => parseVersion(version).patch;
 
-export const isVersion = (version: string) => !!valid(version);
-const isGreaterThan = (left: string, right: string) => gt(left, right);
-const isLessThanRange = (version: string, range: string) => ltr(version, range);
+export const isVersion = (version: string): boolean => !!valid(version);
+const isGreaterThan = (left: string, right: string): boolean => gt(left, right);
+const isLessThanRange = (version: string, range: string): boolean =>
+  ltr(version, range);
 
-const isSingleVersion = (range: string) => {
+const isSingleVersion = (range: string): boolean => {
   const { version, operator } = parseRange(range);
 
   return operator
@@ -31,10 +32,10 @@ const isSingleVersion = (range: string) => {
     : isVersion(version);
 };
 
-const isStable = (version: string) =>
+const isStable = (version: string): boolean =>
   parseVersion(version).prerelease ? false : isVersion(version);
 
-export const isValid = (input: string) =>
+export const isValid = (input: string): boolean =>
   input
     .split(',')
     .map(piece => piece.trim())
@@ -46,11 +47,11 @@ export const isValid = (input: string) =>
         : isVersion(version);
     });
 
-export const matches = (version: string, range: string) =>
+export const matches = (version: string, range: string): boolean =>
   satisfies(version, range);
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   maxSatisfying(versions, range);
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   minSatisfying(versions, range);
 
 const getNewValue = (
@@ -58,7 +59,7 @@ const getNewValue = (
   rangeStrategy: RangeStrategy,
   _fromVersion: string,
   toVersion: string
-) => {
+): string => {
   switch (rangeStrategy) {
     case 'pin':
       return pin({ to: toVersion });
@@ -73,7 +74,7 @@ const getNewValue = (
   }
 };
 
-export const sortVersions = (left: string, right: string) =>
+export const sortVersions = (left: string, right: string): number =>
   gt(left, right) ? 1 : -1;
 
 export const api: VersioningApi = {
diff --git a/lib/versioning/ruby/operator.ts b/lib/versioning/ruby/operator.ts
index 05e32a35e5..7b3b5def09 100644
--- a/lib/versioning/ruby/operator.ts
+++ b/lib/versioning/ruby/operator.ts
@@ -11,8 +11,9 @@ const PGTE = '~>';
 const SINGLE = [EQUAL];
 const ALL = [EQUAL, NOT_EQUAL, GT, LT, GTE, LTE, PGTE];
 
-const isValidOperator = (operator: string) => ALL.includes(operator);
-const isSingleOperator = (operator: string) => SINGLE.includes(operator);
+const isValidOperator = (operator: string): boolean => ALL.includes(operator);
+const isSingleOperator = (operator: string): boolean =>
+  SINGLE.includes(operator);
 
 export {
   EQUAL,
diff --git a/lib/versioning/ruby/range.ts b/lib/versioning/ruby/range.ts
index e2f161f0e6..3aaa5e98b0 100644
--- a/lib/versioning/ruby/range.ts
+++ b/lib/versioning/ruby/range.ts
@@ -27,7 +27,7 @@ interface GemVersion {
 }
 type GemRequirement = [string, GemVersion];
 
-const ltr = (version: string, range: string) => {
+const ltr = (version: string, range: string): boolean => {
   const gemVersion: GemVersion = create(version);
   const requirements: GemRequirement[] = range.split(',').map(_parse);
 
diff --git a/lib/versioning/ruby/strategies/bump.ts b/lib/versioning/ruby/strategies/bump.ts
index 723adedda7..350127831a 100644
--- a/lib/versioning/ruby/strategies/bump.ts
+++ b/lib/versioning/ruby/strategies/bump.ts
@@ -4,7 +4,7 @@ import { EQUAL, NOT_EQUAL, GT, LT, GTE, LTE, PGTE } from '../operator';
 import { floor, increment, decrement } from '../version';
 import { parse as parseRange } from '../range';
 
-export default ({ range, to }: { range: string; to: string }) => {
+export default ({ range, to }: { range: string; to: string }): string => {
   const ranges = range.split(',').map(parseRange);
   const results = ranges.map(({ operator, version: ver }) => {
     switch (operator) {
diff --git a/lib/versioning/ruby/strategies/pin.ts b/lib/versioning/ruby/strategies/pin.ts
index 2795633636..e7f7a12b60 100644
--- a/lib/versioning/ruby/strategies/pin.ts
+++ b/lib/versioning/ruby/strategies/pin.ts
@@ -1 +1 @@
-export default ({ to }: { to: string }) => to;
+export default ({ to }: { to: string }): string => to;
diff --git a/lib/versioning/ruby/strategies/replace.ts b/lib/versioning/ruby/strategies/replace.ts
index 927c9a7b1d..0fde62c4b3 100644
--- a/lib/versioning/ruby/strategies/replace.ts
+++ b/lib/versioning/ruby/strategies/replace.ts
@@ -1,7 +1,7 @@
 import { satisfies } from '@snyk/ruby-semver';
 import bump from './bump';
 
-export default ({ to, range }: { range: string; to: string }) => {
+export default ({ to, range }: { range: string; to: string }): string => {
   if (satisfies(to, range)) {
     return range;
   }
diff --git a/lib/versioning/ruby/version.ts b/lib/versioning/ruby/version.ts
index e46d249b0a..edad649cef 100644
--- a/lib/versioning/ruby/version.ts
+++ b/lib/versioning/ruby/version.ts
@@ -16,13 +16,13 @@ const parse = (version: string): RubyVersion => ({
   prerelease: prerelease(version),
 });
 
-const adapt = (left: string, right: string) =>
+const adapt = (left: string, right: string): string =>
   left
     .split('.')
     .slice(0, right.split('.').length)
     .join('.');
 
-const floor = (version: string) =>
+const floor = (version: string): string =>
   [
     ...create(version)
       .release()
@@ -32,7 +32,7 @@ const floor = (version: string) =>
   ].join('.');
 
 // istanbul ignore next
-const incrementLastSegment = (version: string) => {
+const incrementLastSegment = (version: string): string => {
   const segments = create(version)
     .release()
     .getSegments();
@@ -47,14 +47,14 @@ const incrementMajor = (
   min: number,
   ptch: number,
   pre: string[]
-) => (min === 0 || ptch === 0 || pre.length === 0 ? maj + 1 : maj);
+): number => (min === 0 || ptch === 0 || pre.length === 0 ? maj + 1 : maj);
 
 // istanbul ignore next
-const incrementMinor = (min: number, ptch: number, pre: string[]) =>
+const incrementMinor = (min: number, ptch: number, pre: string[]): number =>
   ptch === 0 || pre.length === 0 ? min + 1 : min;
 
 // istanbul ignore next
-const incrementPatch = (ptch: number, pre: string[]) =>
+const incrementPatch = (ptch: number, pre: string[]): number =>
   pre.length === 0 ? ptch + 1 : ptch;
 
 // istanbul ignore next
diff --git a/lib/versioning/semver/index.ts b/lib/versioning/semver/index.ts
index cadf2f520a..9b068e3578 100644
--- a/lib/versioning/semver/index.ts
+++ b/lib/versioning/semver/index.ts
@@ -19,7 +19,7 @@ const {
 } = semver;
 
 // If this is left as an alias, inputs like "17.04.0" throw errors
-export const isVersion = (input: string) => valid(input);
+export const isVersion = (input: string): string => valid(input);
 
 export { isVersion as isValid, maxSatisfyingVersion };
 
@@ -28,7 +28,7 @@ function getNewValue(
   _rangeStrategy: RangeStrategy,
   _fromVersion: string,
   toVersion: string
-) {
+): string {
   return toVersion;
 }
 
diff --git a/lib/versioning/swift/index.ts b/lib/versioning/swift/index.ts
index 0f0df3a226..8ec6dcc2f9 100644
--- a/lib/versioning/swift/index.ts
+++ b/lib/versioning/swift/index.ts
@@ -20,16 +20,16 @@ const {
   eq: equals,
 } = semver;
 
-export const isValid = (input: string) =>
+export const isValid = (input: string): boolean =>
   !!valid(input) || !!validRange(toSemverRange(input));
-export const isVersion = (input: string) => !!valid(input);
-const maxSatisfyingVersion = (versions: string[], range: string) =>
+export const isVersion = (input: string): boolean => !!valid(input);
+const maxSatisfyingVersion = (versions: string[], range: string): string =>
   maxSatisfying(versions, toSemverRange(range));
-const minSatisfyingVersion = (versions: string[], range: string) =>
+const minSatisfyingVersion = (versions: string[], range: string): string =>
   minSatisfying(versions, toSemverRange(range));
-const isLessThanRange = (version: string, range: string) =>
+const isLessThanRange = (version: string, range: string): boolean =>
   ltr(version, toSemverRange(range));
-const matches = (version: string, range: string) =>
+const matches = (version: string, range: string): boolean =>
   satisfies(version, toSemverRange(range));
 
 export const api: VersioningApi = {
diff --git a/lib/versioning/swift/range.ts b/lib/versioning/swift/range.ts
index 9552cf4575..9bfaa6a4a2 100644
--- a/lib/versioning/swift/range.ts
+++ b/lib/versioning/swift/range.ts
@@ -6,7 +6,7 @@ const fromRange = /^\s*"([^"]+)"\s*\.\.\.\s*$/;
 const binaryRange = /^\s*"([^"]+)"\s*(\.\.[.<])\s*"([^"]+)"\s*$/;
 const toRange = /^\s*(\.\.[.<])\s*"([^"]+)"\s*$/;
 
-function toSemverRange(range: string) {
+function toSemverRange(range: string): string {
   if (fromParam.test(range)) {
     const [, version] = range.match(fromParam);
     if (semver.valid(version)) {
@@ -39,7 +39,7 @@ function getNewValue(
   _rangeStrategy: RangeStrategy,
   _fromVersion: string,
   toVersion: string
-) {
+): string {
   if (fromParam.test(currentValue)) {
     return toVersion;
   }
diff --git a/lib/workers/branch/schedule.ts b/lib/workers/branch/schedule.ts
index c10be4b7de..c3ff3f3636 100644
--- a/lib/workers/branch/schedule.ts
+++ b/lib/workers/branch/schedule.ts
@@ -65,7 +65,7 @@ export function hasValidSchedule(
   return [true, ''];
 }
 
-export function isScheduledNow(config) {
+export function isScheduledNow(config): boolean {
   let configSchedule = config.schedule;
   logger.debug(`Checking schedule(${configSchedule}, ${config.timezone})`);
   if (
diff --git a/lib/workers/branch/status-checks.ts b/lib/workers/branch/status-checks.ts
index c05704a788..e9dfc6c2b3 100644
--- a/lib/workers/branch/status-checks.ts
+++ b/lib/workers/branch/status-checks.ts
@@ -8,7 +8,7 @@ async function setStatusCheck(
   context: string,
   description: string,
   state: string
-) {
+): Promise<void> {
   const existingState = await platform.getBranchStatusCheck(
     branchName,
     context
@@ -33,7 +33,7 @@ export type StabilityConfig = RenovateConfig & {
   branchName: string;
 };
 
-export async function setStability(config: StabilityConfig) {
+export async function setStability(config: StabilityConfig): Promise<void> {
   if (!config.stabilityStatus) {
     return;
   }
diff --git a/lib/workers/global/limits.ts b/lib/workers/global/limits.ts
index ed2f2cf670..0cf7d3052d 100644
--- a/lib/workers/global/limits.ts
+++ b/lib/workers/global/limits.ts
@@ -4,12 +4,12 @@ const limitsToInit = ['prCommitsPerRunLimit'];
 const l: Record<string, number> = {};
 const v: Record<string, number> = {};
 
-export function setLimit(name: string, value: number) {
+export function setLimit(name: string, value: number): void {
   logger.debug(`Limits.setLimit l[${name}] = ${value}`);
   l[name] = value;
 }
 
-export function init(config: Record<string, any>) {
+export function init(config: Record<string, any>): void {
   logger.debug(`Limits.init enter method`);
   for (const limit of limitsToInit) {
     logger.debug(`Limits.init ${limit} processing`);
@@ -24,7 +24,7 @@ export function init(config: Record<string, any>) {
   }
 }
 
-export function getLimitRemaining(name: string) {
+export function getLimitRemaining(name: string): number {
   let result;
   if (typeof v[name] !== 'undefined') {
     result = l[name] - v[name];
@@ -34,7 +34,7 @@ export function getLimitRemaining(name: string) {
   return result;
 }
 
-export function incrementLimit(name: string, value = 1) {
+export function incrementLimit(name: string, value = 1): void {
   if (typeof v[name] !== 'undefined') {
     v[name] += value;
   }
diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts
index 2e6ee518a2..635643ce3b 100644
--- a/lib/workers/repository/onboarding/branch/check.ts
+++ b/lib/workers/repository/onboarding/branch/check.ts
@@ -36,7 +36,10 @@ const packageJsonConfigExists = async (): Promise<boolean> => {
   return false;
 };
 
-const closedPrExists = () =>
+// TODO: types
+export type Pr = any;
+
+const closedPrExists = (): Promise<Pr> =>
   platform.findPr(onboardingBranch, onboardingPrTitle, '!open');
 
 export const isOnboarded = async (config: RenovateConfig): Promise<boolean> => {
@@ -88,4 +91,5 @@ export const isOnboarded = async (config: RenovateConfig): Promise<boolean> => {
   throw new Error('disabled');
 };
 
-export const onboardingPrExists = () => platform.getBranchPr(onboardingBranch);
+export const onboardingPrExists = (): Promise<boolean> =>
+  platform.getBranchPr(onboardingBranch);
diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts
index 6a9539373d..32c070a95c 100644
--- a/lib/workers/repository/process/lookup/index.ts
+++ b/lib/workers/repository/process/lookup/index.ts
@@ -109,7 +109,7 @@ function getFromVersion(
   return version.maxSatisfyingVersion(useVersions, currentValue);
 }
 
-function getBucket(config: LookupUpdateConfig, update: LookupUpdate) {
+function getBucket(config: LookupUpdateConfig, update: LookupUpdate): string {
   const { separateMajorMinor, separateMultipleMajor } = config;
   const { updateType, newMajor } = update;
   if (updateType === 'lockfileUpdate') {
diff --git a/lib/workers/repository/updates/branchify.ts b/lib/workers/repository/updates/branchify.ts
index 15dc93ce9f..28e040750c 100644
--- a/lib/workers/repository/updates/branchify.ts
+++ b/lib/workers/repository/updates/branchify.ts
@@ -25,7 +25,7 @@ function cleanBranchName(branchName: string): string {
 export function branchifyUpgrades(
   config: RenovateConfig,
   packageFiles: Record<string, any[]>
-) {
+): RenovateConfig {
   logger.debug('branchifyUpgrades');
   const updates = flattenUpdates(config, packageFiles);
   logger.debug(
@@ -43,7 +43,8 @@ export function branchifyUpgrades(
     update.currentVersion = update.currentValue;
     update.newVersion = update.newVersion || update.newValue;
     // massage for handlebars
-    const upper = (str: string) => str.charAt(0).toUpperCase() + str.substr(1);
+    const upper = (str: string): string =>
+      str.charAt(0).toUpperCase() + str.substr(1);
     if (update.updateType) {
       update[`is${upper(update.updateType)}`] = true;
     }
diff --git a/lib/workers/repository/updates/flatten.ts b/lib/workers/repository/updates/flatten.ts
index e8e3694d43..83d12cbacf 100644
--- a/lib/workers/repository/updates/flatten.ts
+++ b/lib/workers/repository/updates/flatten.ts
@@ -17,7 +17,7 @@ function getUpdateTypeRules(packageRules: PackageRule[]): PackageRule[] {
 export function flattenUpdates(
   config: RenovateConfig,
   packageFiles: Record<string, any[]>
-) {
+): RenovateConfig[] {
   const updates = [];
   const updateTypes = [
     'major',
diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts
index 54b702c572..175a1ef754 100644
--- a/lib/workers/repository/updates/generate.ts
+++ b/lib/workers/repository/updates/generate.ts
@@ -3,7 +3,11 @@ import { DateTime } from 'luxon';
 import semver from 'semver';
 import mdTable from 'markdown-table';
 import { logger } from '../../../logger';
-import { mergeChildConfig, ManagerConfig } from '../../../config';
+import {
+  mergeChildConfig,
+  ManagerConfig,
+  RenovateConfig,
+} from '../../../config';
 import { PackageDependency } from '../../../manager/common';
 
 function ifTypesGroup(
@@ -59,7 +63,7 @@ function getTableValues(
   return null;
 }
 
-export function generateBranchConfig(branchUpgrades) {
+export function generateBranchConfig(branchUpgrades): RenovateConfig {
   logger.debug(`generateBranchConfig(${branchUpgrades.length})`);
   logger.trace({ config: branchUpgrades });
   let config: any = {
diff --git a/test/.eslintrc.js b/test/.eslintrc.js
index e75e9d6d4f..d7cc230f0a 100644
--- a/test/.eslintrc.js
+++ b/test/.eslintrc.js
@@ -12,5 +12,6 @@ module.exports = {
 
     '@typescript-eslint/no-var-requires': 0,
     '@typescript-eslint/no-object-literal-type-assertion': 0,
+    '@typescript-eslint/explicit-function-return-type': 0,
   },
 };
diff --git a/test/static-files.spec.ts b/test/static-files.spec.ts
index 4237df1a59..72f090a0cb 100644
--- a/test/static-files.spec.ts
+++ b/test/static-files.spec.ts
@@ -4,13 +4,13 @@ const glob = util.promisify(require('glob'));
 
 const ignoredExtensions = ['js', 'ts', 'md', 'pyc', 'DS_Store', 'map'];
 
-function filterFiles(files: string[]) {
+function filterFiles(files: string[]): string[] {
   return files.filter(file =>
     ignoredExtensions.every(extension => !file.endsWith(`.${extension}`))
   );
 }
 
-async function getFiles(dir: string) {
+async function getFiles(dir: string): Promise<string[]> {
   return filterFiles(await glob(`${dir}/**/*`, { dot: true, nodir: true })).map(
     (file: string) => file.replace(`${dir}/`, '')
   );
diff --git a/test/website-docs.spec.ts b/test/website-docs.spec.ts
index dc27a0268c..49fa105e9f 100644
--- a/test/website-docs.spec.ts
+++ b/test/website-docs.spec.ts
@@ -72,12 +72,14 @@ describe('docs', () => {
     toContainOption(received, argument) {
       if (received.includes(argument)) {
         return {
-          message: () => `Option "${argument}" should be within definitions`,
+          message: (): string =>
+            `Option "${argument}" should be within definitions`,
           pass: true,
         };
       }
       return {
-        message: () => `Option "${argument}" doesn't exist within definitions`,
+        message: (): string =>
+          `Option "${argument}" doesn't exist within definitions`,
         pass: false,
       };
     },
-- 
GitLab