diff --git a/lib/manager/ansible/extract.ts b/lib/manager/ansible/extract.ts
index b28748cadb3c03c7b439412058868a9a7577ffe5..b7bc8b625b73e1d6e8404aca33ed7796fea76221 100644
--- a/lib/manager/ansible/extract.ts
+++ b/lib/manager/ansible/extract.ts
@@ -2,7 +2,9 @@ import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
 
-export default function extractPackageFile(content: string): PackageFile {
+export default function extractPackageFile(
+  content: string
+): PackageFile | null {
   logger.trace('ansible.extractPackageFile()');
   let deps: PackageDependency[] = [];
   let lineNumber = 0;
diff --git a/lib/manager/ansible/update.ts b/lib/manager/ansible/update.ts
index ae2781a70b99f0e42f6d8d4fea72082ce0101b94..a24b5328775000c21b9e1fd20d4f021969600cf0 100644
--- a/lib/manager/ansible/update.ts
+++ b/lib/manager/ansible/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export default function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-) {
+): string | null {
   try {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`ansible.updateDependency(): ${newFrom}`);
diff --git a/lib/manager/bazel/extract.ts b/lib/manager/bazel/extract.ts
index 4269f55a0d9ba0fdd73b30e7f7d326d25766e7ed..715bef242f12989573bb9db00bcda477ecbd0673 100644
--- a/lib/manager/bazel/extract.ts
+++ b/lib/manager/bazel/extract.ts
@@ -4,7 +4,12 @@ import { parse as _parse } from 'url';
 import { logger } from '../../logger';
 import { PackageDependency, PackageFile } from '../common';
 
-function parseUrl(urlString: string) {
+interface UrlParsedResult {
+  repo: string;
+  currentValue: string;
+}
+
+function parseUrl(urlString: string): UrlParsedResult | null {
   // istanbul ignore if
   if (!urlString) {
     return null;
@@ -29,7 +34,7 @@ function parseUrl(urlString: string) {
   return null;
 }
 
-function findBalancedParenIndex(longString: string) {
+function findBalancedParenIndex(longString: string): number {
   /**
    * Minimalistic string parser with single task -> find last char in def.
    * It treats [)] as the last char.
@@ -63,7 +68,7 @@ function findBalancedParenIndex(longString: string) {
   });
 }
 
-function parseContent(content: string) {
+function parseContent(content: string): string[] {
   return [
     'container_pull',
     'http_archive',
@@ -86,7 +91,7 @@ function parseContent(content: string) {
   );
 }
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   const definitions = parseContent(content);
   if (!definitions.length) {
     logger.debug('No matching WORKSPACE definitions found');
diff --git a/lib/manager/bazel/update.ts b/lib/manager/bazel/update.ts
index 318d723d81e53645fa0ab93f64bf3ed3c4532b6d..4a44124b4fccd70ae4214e2538ad057d613c27ae 100644
--- a/lib/manager/bazel/update.ts
+++ b/lib/manager/bazel/update.ts
@@ -7,7 +7,7 @@ function updateWithNewVersion(
   content: string,
   currentValue: string,
   newValue: string
-) {
+): string {
   const currentVersion = currentValue.replace(/^v/, '');
   const newVersion = newValue.replace(/^v/, '');
   let newContent = content;
@@ -17,7 +17,7 @@ function updateWithNewVersion(
   return newContent;
 }
 
-function extractUrl(flattened: string) {
+function extractUrl(flattened: string): string[] | null {
   const urlMatch = flattened.match(/url="(.*?)"/);
   if (!urlMatch) {
     logger.debug('Cannot locate urls in new definition');
@@ -26,7 +26,7 @@ function extractUrl(flattened: string) {
   return [urlMatch[1]];
 }
 
-function extractUrls(content: string) {
+function extractUrls(content: string): string[] | null {
   const flattened = content.replace(/\n/g, '').replace(/\s/g, '');
   const urlsMatch = flattened.match(/urls?=\[.*?\]/);
   if (!urlsMatch) {
@@ -40,9 +40,12 @@ function extractUrls(content: string) {
   return urls;
 }
 
-async function getHashFromUrl(url: string) {
+async function getHashFromUrl(url: string): Promise<string | null> {
   const cacheNamespace = 'url-sha256';
-  const cachedResult = await renovateCache.get(cacheNamespace, url);
+  const cachedResult = await renovateCache.get<string | null>(
+    cacheNamespace,
+    url
+  );
   /* istanbul ignore next line */
   if (cachedResult) return cachedResult;
   try {
@@ -57,7 +60,7 @@ async function getHashFromUrl(url: string) {
   }
 }
 
-async function getHashFromUrls(urls: string[]) {
+async function getHashFromUrls(urls: string[]): Promise<string | null> {
   const hashes = (await Promise.all(
     urls.map(url => getHashFromUrl(url))
   )).filter(Boolean);
@@ -73,14 +76,14 @@ async function getHashFromUrls(urls: string[]) {
   return distinctHashes[0];
 }
 
-function setNewHash(content: string, hash: string) {
+function setNewHash(content: string, hash: string): string {
   return content.replace(/(sha256\s*=\s*)"[^"]+"/, `$1"${hash}"`);
 }
 
 export async function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): Promise<string> {
+): Promise<string | null> {
   try {
     logger.debug(
       `bazel.updateDependency(): ${upgrade.newValue || upgrade.newDigest}`
diff --git a/lib/manager/buildkite/extract.ts b/lib/manager/buildkite/extract.ts
index 3bdcace4d6355a47a88f101210457af86a71a34e..7fde4a27d4a8b626002d32332755d86f55359a25 100644
--- a/lib/manager/buildkite/extract.ts
+++ b/lib/manager/buildkite/extract.ts
@@ -4,7 +4,7 @@ import { PackageFile, PackageDependency } from '../common';
 
 export { extractPackageFile };
 
-function extractPackageFile(content: string): PackageFile {
+function extractPackageFile(content: string): PackageFile | null {
   const deps: PackageDependency[] = [];
   try {
     const lines = content.split('\n');
diff --git a/lib/manager/buildkite/update.ts b/lib/manager/buildkite/update.ts
index 8e33f5b1f25163b89cb673be3acd2b7a138c1924..14e7da9691c531b5e61e54b17ca45f62b9a44dbd 100644
--- a/lib/manager/buildkite/update.ts
+++ b/lib/manager/buildkite/update.ts
@@ -1,7 +1,10 @@
 import { logger } from '../../logger';
 import { Upgrade } from '../common';
 
-export function updateDependency(currentFileContent: string, upgrade: Upgrade) {
+export function updateDependency(
+  currentFileContent: string,
+  upgrade: Upgrade
+): string | null {
   try {
     const lineIdx = upgrade.managerData.lineNumber - 1;
     logger.debug(`buildkite.updateDependency: ${upgrade.newValue}`);
diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts
index 1dc820f246eedc7d686822821bf833946c124d2f..dcc325ea38615ea4481b31e44db88669953acca3 100644
--- a/lib/manager/bundler/artifacts.ts
+++ b/lib/manager/bundler/artifacts.ts
@@ -10,7 +10,7 @@ import {
   matches,
   sortVersions,
 } from '../../versioning/ruby';
-import { UpdateArtifactsConfig } from '../common';
+import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
 
 // istanbul ignore next
 export async function updateArtifacts(
@@ -18,7 +18,7 @@ export async function updateArtifacts(
   updatedDeps: string[],
   newPackageFileContent: string,
   config: UpdateArtifactsConfig
-) {
+): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`bundler.updateArtifacts(${packageFileName})`);
   // istanbul ignore if
   if (global.repoCache.bundlerArtifactsError) {
diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts
index ef60fb0ca977b985c8dd5dc40c1bfe871111af58..3d5eabea6c87055d47da0a63946a66df6a4a40ab 100644
--- a/lib/manager/bundler/extract.ts
+++ b/lib/manager/bundler/extract.ts
@@ -7,7 +7,7 @@ export { extractPackageFile };
 async function extractPackageFile(
   content: string,
   fileName?: string
-): Promise<PackageFile> {
+): Promise<PackageFile | null> {
   const res: PackageFile = {
     registryUrls: [],
     deps: [],
diff --git a/lib/manager/bundler/range.ts b/lib/manager/bundler/range.ts
index 067a55721e5eb0fabc02a23ce95b23951a66524b..ae7626226f7a23c4c656d980297e0ae9c6ad048e 100644
--- a/lib/manager/bundler/range.ts
+++ b/lib/manager/bundler/range.ts
@@ -1,3 +1,5 @@
+import { RangeStrategy } from '../../versioning';
+
 /*
  * The getRangeStrategy() function is optional and can be removed if not applicable.
  * It is used when the user configures rangeStrategy=auto.
@@ -11,6 +13,6 @@
  *
  */
 
-export function getRangeStrategy() {
+export function getRangeStrategy(): RangeStrategy {
   return 'replace';
 }
diff --git a/lib/manager/bundler/update.ts b/lib/manager/bundler/update.ts
index 2c0f3a2ebc9d9d57fac9d6a7ab8003d8fd217c64..eb6784a3208dac402bd914f3a47ab5c8dad3f572 100644
--- a/lib/manager/bundler/update.ts
+++ b/lib/manager/bundler/update.ts
@@ -10,7 +10,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   currentFileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const delimiter =
       currentFileContent.split('"').length >
diff --git a/lib/manager/cargo/artifacts.ts b/lib/manager/cargo/artifacts.ts
index 1509aa56dc2fcd0a51ef829f5e63387fc4049c63..b1adefc87af592f43871dcfac818d987652aad94 100644
--- a/lib/manager/cargo/artifacts.ts
+++ b/lib/manager/cargo/artifacts.ts
@@ -11,7 +11,7 @@ export async function updateArtifacts(
   updatedDeps: string[],
   newPackageFileContent: string,
   config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[]> {
+): Promise<UpdateArtifactsResult[] | null> {
   await logger.debug(`cargo.updateArtifacts(${packageFileName})`);
   if (updatedDeps === undefined || updatedDeps.length < 1) {
     logger.debug('No updated cargo deps - returning null');
diff --git a/lib/manager/cargo/extract.ts b/lib/manager/cargo/extract.ts
index 399cee39bc25396923f322a9faacd402254e8c41..8e4219e25bf9bb97fc664cbd2d861a0b2883ba6b 100644
--- a/lib/manager/cargo/extract.ts
+++ b/lib/manager/cargo/extract.ts
@@ -7,7 +7,7 @@ import { CargoConfig, CargoSection } from './types';
 export function extractPackageFile(
   content: string,
   fileName: string
-): PackageFile {
+): PackageFile | null {
   logger.trace(`cargo.extractPackageFile(${fileName})`);
   let parsedContent: CargoConfig;
   try {
@@ -55,7 +55,7 @@ function extractFromSection(
   parsedContent: CargoSection,
   section: keyof CargoSection,
   target?: string
-) {
+): PackageDependency[] {
   const deps: PackageDependency[] = [];
   const sectionContent = parsedContent[section];
   if (!sectionContent) {
diff --git a/lib/manager/cargo/update.ts b/lib/manager/cargo/update.ts
index 0c8f1168988dec366caf16c8e48cec716ed6f609..11b6d7c977b7d2dfeb96b8e752374260a2b0ac38 100644
--- a/lib/manager/cargo/update.ts
+++ b/lib/manager/cargo/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 import { CargoConfig, CargoSection } from './types';
 
 // Return true if the match string is found at index in content
-function matchAt(content: string, index: number, match: string) {
+function matchAt(content: string, index: number, match: string): boolean {
   return content.substring(index, index + match.length) === match;
 }
 
@@ -15,7 +15,7 @@ function replaceAt(
   index: number,
   oldString: string,
   newString: string
-) {
+): string {
   logger.debug(`Replacing ${oldString} with ${newString} at index ${index}`);
   return (
     content.substr(0, index) +
@@ -27,7 +27,7 @@ function replaceAt(
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade<{ nestedVersion?: boolean }>
-) {
+): string {
   logger.trace({ config: upgrade }, 'poetry.updateDependency()');
   if (!upgrade) {
     return fileContent;
diff --git a/lib/manager/circleci/extract.ts b/lib/manager/circleci/extract.ts
index ed12bc590ca806905fa97904b46d9c3f58d40674..07a3600fd9a29c16bc05c1e8d271102b8c295ddc 100644
--- a/lib/manager/circleci/extract.ts
+++ b/lib/manager/circleci/extract.ts
@@ -2,7 +2,7 @@ import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   const deps: PackageDependency[] = [];
   try {
     const lines = content.split('\n');
diff --git a/lib/manager/circleci/update.ts b/lib/manager/circleci/update.ts
index 23b35a55465ca5d9397f29f1ace34ac84b84831e..b54eae70bbb9420f820b8bbb45b46bdfb34d2c38 100644
--- a/lib/manager/circleci/update.ts
+++ b/lib/manager/circleci/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const lines = fileContent.split('\n');
     const lineToChange = lines[upgrade.managerData.lineNumber];
diff --git a/lib/manager/common.ts b/lib/manager/common.ts
index 9ed94d1035a809ff9c9a14be3ff28f40ae116a6c..82760aa0b11960c27b6196bfde67a28607660e01 100644
--- a/lib/manager/common.ts
+++ b/lib/manager/common.ts
@@ -173,15 +173,17 @@ export interface ManagerApi {
   extractAllPackageFiles?(
     config: ExtractConfig,
     files: string[]
-  ): Result<PackageFile[]>;
+  ): Result<PackageFile[] | null>;
 
   extractPackageFile?(
     content: string,
     packageFile?: string,
     config?: ExtractConfig
-  ): Result<PackageFile>;
+  ): Result<PackageFile | null>;
 
-  getPackageUpdates(config: PackageUpdateConfig): Result<PackageUpdateResult[]>;
+  getPackageUpdates?(
+    config: PackageUpdateConfig
+  ): Result<PackageUpdateResult[]>;
 
   getRangeStrategy(config: RangeConfig): RangeStrategy;
 
@@ -190,9 +192,12 @@ export interface ManagerApi {
     updatedDeps: string[],
     newPackageFileContent: string,
     config: UpdateArtifactsConfig
-  ): Result<UpdateArtifactsResult[]>;
+  ): Result<UpdateArtifactsResult[] | null>;
 
-  updateDependency(fileContent: string, upgrade: Upgrade): Result<string>;
+  updateDependency(
+    fileContent: string,
+    upgrade: Upgrade
+  ): Result<string | null>;
 }
 
 // TODO: name and properties used by npm manager
diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts
index 87655c6a1901e59ab643212480dac20090e2028c..e2487716e35ca79f4213b8d4ce89b338854d1134 100644
--- a/lib/manager/composer/artifacts.ts
+++ b/lib/manager/composer/artifacts.ts
@@ -3,7 +3,7 @@ import URL from 'url';
 import fs from 'fs-extra';
 import upath from 'upath';
 import { exec } from '../../util/exec';
-import { UpdateArtifactsConfig } from '../common';
+import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common';
 import { logger } from '../../logger';
 import * as hostRules from '../../util/host-rules';
 import { getChildProcessEnv } from '../../util/env';
@@ -13,7 +13,7 @@ export async function updateArtifacts(
   updatedDeps: string[],
   newPackageFileContent: string,
   config: UpdateArtifactsConfig
-) {
+): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`composer.updateArtifacts(${packageFileName})`);
   process.env.COMPOSER_CACHE_DIR =
     process.env.COMPOSER_CACHE_DIR ||
diff --git a/lib/manager/composer/extract.ts b/lib/manager/composer/extract.ts
index 71d76542de4dc0582ca7739a2a6f27d85f8cc80a..db355343a45ecbf3614254c9d06e6da2d55cbd1a 100644
--- a/lib/manager/composer/extract.ts
+++ b/lib/manager/composer/extract.ts
@@ -81,7 +81,10 @@ function parseRepositories(
   }
 }
 
-export async function extractPackageFile(content: string, fileName: string) {
+export async function extractPackageFile(
+  content: string,
+  fileName: string
+): Promise<PackageFile | null> {
   logger.trace(`composer.extractPackageFile(${fileName})`);
   let composerJson: ComposerConfig;
   try {
diff --git a/lib/manager/dockerfile/extract.ts b/lib/manager/dockerfile/extract.ts
index c032d917d3d2a245e94dcebf1b31f4cbc39f593b..6b46dde94d6b0fbe6e7af0cac50a608e34b836bf 100644
--- a/lib/manager/dockerfile/extract.ts
+++ b/lib/manager/dockerfile/extract.ts
@@ -28,7 +28,7 @@ export function splitImageParts(currentFrom: string): PackageDependency {
   return dep;
 }
 
-export function getDep(currentFrom: string) {
+export function getDep(currentFrom: string): PackageDependency {
   const dep = splitImageParts(currentFrom);
   dep.datasource = 'docker';
   if (
@@ -41,7 +41,7 @@ export function getDep(currentFrom: string) {
   return dep;
 }
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   const deps: PackageDependency[] = [];
   const stageNames: string[] = [];
   let lineNumber = 0;
diff --git a/lib/manager/dockerfile/update.ts b/lib/manager/dockerfile/update.ts
index feae2bfa3d191b7ff4833161db86c967e67b8cf8..cfab1b29ec0f725bc1f0ba868d7a4b68f7d42dc1 100644
--- a/lib/manager/dockerfile/update.ts
+++ b/lib/manager/dockerfile/update.ts
@@ -1,7 +1,7 @@
 import { logger } from '../../logger';
 import { Upgrade } from '../common';
 
-export function getNewFrom(upgrade: Upgrade) {
+export function getNewFrom(upgrade: Upgrade): string {
   const { depName, newValue, newDigest } = upgrade;
   let newFrom = depName;
   if (newValue) {
@@ -13,7 +13,10 @@ export function getNewFrom(upgrade: Upgrade) {
   return newFrom;
 }
 
-export function updateDependency(fileContent: string, upgrade: Upgrade) {
+export function updateDependency(
+  fileContent: string,
+  upgrade: Upgrade
+): string | null {
   try {
     const { lineNumber, fromSuffix } = upgrade.managerData;
     let { fromPrefix } = upgrade.managerData;
diff --git a/lib/manager/droneci/extract.ts b/lib/manager/droneci/extract.ts
index 4b54d1262d7aea895a2717d450cccf82b421f8a5..775917e65d454c3884c974cf190bb5f7c77b9b0c 100644
--- a/lib/manager/droneci/extract.ts
+++ b/lib/manager/droneci/extract.ts
@@ -2,7 +2,7 @@ import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   const deps: PackageDependency[] = [];
   try {
     const lines = content.split('\n');
diff --git a/lib/manager/droneci/update.ts b/lib/manager/droneci/update.ts
index c9f20f840a32255119bca44b93320c28d8890674..78e8633c1b5982b478f7bd22cc1a0f24b0dedab5 100644
--- a/lib/manager/droneci/update.ts
+++ b/lib/manager/droneci/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const lines = fileContent.split('\n');
     const lineToChange = lines[upgrade.managerData.lineNumber];
diff --git a/lib/manager/github-actions/extract.ts b/lib/manager/github-actions/extract.ts
index b50126c0936d19373ab547f54145bbbee7b15583..68ef79f86ae418d62471395cc0ab574f58a91d8d 100644
--- a/lib/manager/github-actions/extract.ts
+++ b/lib/manager/github-actions/extract.ts
@@ -2,7 +2,7 @@ import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   logger.debug('github-actions.extractPackageFile()');
   const deps: PackageDependency[] = [];
   let lineNumber = 0;
diff --git a/lib/manager/github-actions/update.ts b/lib/manager/github-actions/update.ts
index 49e094dac9deb4baeeba239501a37f013496a220..806c53a3acb7e688c5782dbd2c004bac06c28b41 100644
--- a/lib/manager/github-actions/update.ts
+++ b/lib/manager/github-actions/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`github-actions.updateDependency(): ${newFrom}`);
diff --git a/lib/manager/gitlabci-include/extract.ts b/lib/manager/gitlabci-include/extract.ts
index 0200c27a061e91f724813499fa82997ffa9748ee..d625bcc58f11af10c083d34ec4ef1c80e03449c6 100644
--- a/lib/manager/gitlabci-include/extract.ts
+++ b/lib/manager/gitlabci-include/extract.ts
@@ -7,7 +7,7 @@ function extractDepFromInclude(includeObj: {
   file: any;
   project: string;
   ref: string;
-}) {
+}): PackageDependency | null {
   if (!includeObj.file || !includeObj.project) {
     return null;
   }
@@ -28,7 +28,7 @@ export function extractPackageFile(
   content: string,
   _packageFile: string,
   config: ExtractConfig
-): PackageFile {
+): PackageFile | null {
   const deps: PackageDependency[] = [];
   try {
     const doc = yaml.safeLoad(content);
diff --git a/lib/manager/gitlabci-include/update.ts b/lib/manager/gitlabci-include/update.ts
index 975ed795af902aed634cff6ba745807b01047f1c..cb116aac3645fce67502f21220818538d394536b 100644
--- a/lib/manager/gitlabci-include/update.ts
+++ b/lib/manager/gitlabci-include/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   currentFileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const { depName, newValue } = upgrade;
 
diff --git a/lib/manager/gitlabci/extract.ts b/lib/manager/gitlabci/extract.ts
index 8e489ca12e68cf00c011f2e0d5a9eb8e4a9248eb..5a565623a8a4d2b356500ff2e8c07bbfde87fae3 100644
--- a/lib/manager/gitlabci/extract.ts
+++ b/lib/manager/gitlabci/extract.ts
@@ -2,7 +2,7 @@ import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   const deps: PackageDependency[] = [];
   try {
     const lines = content.split('\n');
diff --git a/lib/manager/gitlabci/update.ts b/lib/manager/gitlabci/update.ts
index f00493bff6d84a78b3d6dad3f5fbb6358cdc806c..ec10db76b9f512f12519cf69cd6b80e01823f88f 100644
--- a/lib/manager/gitlabci/update.ts
+++ b/lib/manager/gitlabci/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   currentFileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const newFrom = getNewFrom(upgrade);
     const lines = currentFileContent.split('\n');
diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts
index 3eacdbc95c60b03a7eb9b56e14913e75a16e45e7..ba7f7050bc75f0af989d0418b3bf31624610147a 100644
--- a/lib/manager/gomod/artifacts.ts
+++ b/lib/manager/gomod/artifacts.ts
@@ -11,7 +11,7 @@ export async function updateArtifacts(
   _updatedDeps: string[],
   newGoModContent: string,
   config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[]> {
+): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`gomod.updateArtifacts(${goModFileName})`);
   process.env.GOPATH =
     process.env.GOPATH || join(config.cacheDir, './others/go');
diff --git a/lib/manager/gomod/extract.ts b/lib/manager/gomod/extract.ts
index 965a9a72986e5e6a8160eb5febb2b49c23dd1c4a..625cd5b4ed07cd4e603e38b15de7ab9518cab6e0 100644
--- a/lib/manager/gomod/extract.ts
+++ b/lib/manager/gomod/extract.ts
@@ -2,7 +2,11 @@ import { logger } from '../../logger';
 import { isVersion } from '../../versioning/semver';
 import { PackageDependency, PackageFile } from '../common';
 
-function getDep(lineNumber: number, match: RegExpMatchArray, type: string) {
+function getDep(
+  lineNumber: number,
+  match: RegExpMatchArray,
+  type: string
+): PackageDependency {
   const [, , currentValue] = match;
   let [, depName] = match;
   depName = depName.replace(/"/g, '');
@@ -35,7 +39,7 @@ function getDep(lineNumber: number, match: RegExpMatchArray, type: string) {
   return dep;
 }
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   logger.trace({ content }, 'gomod.extractPackageFile()');
   const deps: PackageDependency[] = [];
   try {
diff --git a/lib/manager/gomod/update.ts b/lib/manager/gomod/update.ts
index c63dbf3c9dc3cdd968f785972e56e88b3ada4d51..70534dff0e5b225db709de057026615bf0771c2b 100644
--- a/lib/manager/gomod/update.ts
+++ b/lib/manager/gomod/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   currentFileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     logger.debug(`gomod.updateDependency: ${upgrade.newValue}`);
     const { depName, depType } = upgrade;
diff --git a/lib/manager/gradle-wrapper/extract.ts b/lib/manager/gradle-wrapper/extract.ts
index b4ccac285c3281fc89cad47fa3f2862e54f9746f..190dae4d6c19b0c906afa912a8c5a9c5c64ceacf 100644
--- a/lib/manager/gradle-wrapper/extract.ts
+++ b/lib/manager/gradle-wrapper/extract.ts
@@ -2,7 +2,7 @@ import { coerce } from 'semver';
 import { logger } from '../../logger';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(fileContent: string): PackageFile {
+export function extractPackageFile(fileContent: string): PackageFile | null {
   logger.debug('gradle-wrapper.extractPackageFile()');
   const lines = fileContent.split('\n');
 
diff --git a/lib/manager/gradle-wrapper/update.ts b/lib/manager/gradle-wrapper/update.ts
index a20f419b6fd7b1e96a3b82929762ff128fc723ab..0886e9ede6594ef7f7d5114d186470fe08a22433 100644
--- a/lib/manager/gradle-wrapper/update.ts
+++ b/lib/manager/gradle-wrapper/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export async function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): Promise<string> {
+): Promise<string | null> {
   try {
     logger.debug(upgrade, 'gradle-wrapper.updateDependency()');
     const lines = fileContent.split('\n');
@@ -35,14 +35,14 @@ export async function updateDependency(
   }
 }
 
-function replaceType(url: string) {
+function replaceType(url: string): string {
   return url.replace('bin', 'all');
 }
 
-async function getChecksum(url: string) {
+async function getChecksum(url: string): Promise<string> {
   try {
     const response = await got(url);
-    return response.body;
+    return response.body as string;
   } catch (err) {
     if (err.statusCode === 404 || err.code === 'ENOTFOUND') {
       logger.info('Gradle checksum lookup failure: not found');
diff --git a/lib/manager/gradle/build-gradle.ts b/lib/manager/gradle/build-gradle.ts
index 4322fbe79356a5efdc21b47271c913ab10dfc3d9..5c7c03441e224c1af3fcb26fbb124a324bb2cdf1 100644
--- a/lib/manager/gradle/build-gradle.ts
+++ b/lib/manager/gradle/build-gradle.ts
@@ -26,7 +26,7 @@ export function updateGradleVersion(
   buildGradleContent: string,
   dependency: GradleDependency,
   newVersion: string
-) {
+): string {
   if (dependency) {
     const updateFunctions: UpdateFunction[] = [
       updateVersionLiterals,
@@ -84,7 +84,7 @@ function updateVersionLiterals(
   dependency: GradleDependency,
   buildGradleContent: string,
   newVersion: string
-) {
+): string | null {
   const regexes: RegExp[] = [
     moduleStringVersionFormatMatch(dependency),
     groovyPluginStringVersionFormatMatch(dependency),
@@ -104,7 +104,7 @@ function updateLocalVariables(
   dependency: GradleDependency,
   buildGradleContent: string,
   newVersion: string
-) {
+): string | null {
   const regexes: RegExp[] = [
     moduleMapVariableVersionFormatMatch(dependency),
     moduleStringVariableInterpolationVersionFormatMatch(dependency),
@@ -127,7 +127,7 @@ function updateGlobalVariables(
   dependency: GradleDependency,
   buildGradleContent: string,
   newVersion: string
-) {
+): string | null {
   const variable = variables[`${dependency.group}:${dependency.name}`];
   if (variable) {
     const regex = variableDefinitionFormatMatch(variable);
@@ -146,7 +146,7 @@ function updatePropertyFileGlobalVariables(
   dependency: GradleDependency,
   buildGradleContent: string,
   newVersion: string
-) {
+): string | null {
   const variable = variables[`${dependency.group}:${dependency.name}`];
   if (variable) {
     const regex = new RegExp(`(${variable}\\s*=\\s*)(.*)`);
@@ -159,25 +159,29 @@ function updatePropertyFileGlobalVariables(
 }
 
 // https://github.com/patrikerdes/gradle-use-latest-versions-plugin/blob/8cf9c3917b8b04ba41038923cab270d2adda3aa6/src/main/groovy/se/patrikerdes/DependencyUpdate.groovy#L27-L29
-function moduleStringVersionFormatMatch(dependency: GradleDependency) {
+function moduleStringVersionFormatMatch(dependency: GradleDependency): RegExp {
   return new RegExp(
     `(["']${dependency.group}:${dependency.name}:)[^$].*?(([:@].*?)?["'])`
   );
 }
 
-function groovyPluginStringVersionFormatMatch(dependency: GradleDependency) {
+function groovyPluginStringVersionFormatMatch(
+  dependency: GradleDependency
+): RegExp {
   return new RegExp(
     `(id\\s+["']${dependency.group}["']\\s+version\\s+["'])[^$].*?(["'])`
   );
 }
 
-function kotlinPluginStringVersionFormatMatch(dependency: GradleDependency) {
+function kotlinPluginStringVersionFormatMatch(
+  dependency: GradleDependency
+): RegExp {
   return new RegExp(
     `(id\\("${dependency.group}"\\)\\s+version\\s+")[^$].*?(")`
   );
 }
 
-function moduleMapVersionFormatMatch(dependency: GradleDependency) {
+function moduleMapVersionFormatMatch(dependency: GradleDependency): RegExp {
   // prettier-ignore
   return new RegExp(
     `(group\\s*:\\s*["']${dependency.group}["']\\s*,\\s*` +
@@ -188,7 +192,7 @@ function moduleMapVersionFormatMatch(dependency: GradleDependency) {
 
 function moduleKotlinNamedArgumentVersionFormatMatch(
   dependency: GradleDependency
-) {
+): RegExp {
   // prettier-ignore
   return new RegExp(
     `(group\\s*=\\s*"${dependency.group}"\\s*,\\s*` +
@@ -197,7 +201,9 @@ function moduleKotlinNamedArgumentVersionFormatMatch(
   );
 }
 
-function moduleMapVariableVersionFormatMatch(dependency: GradleDependency) {
+function moduleMapVariableVersionFormatMatch(
+  dependency: GradleDependency
+): RegExp {
   // prettier-ignore
   return new RegExp(
     `group\\s*:\\s*["']${dependency.group}["']\\s*,\\s*` +
@@ -208,7 +214,7 @@ function moduleMapVariableVersionFormatMatch(dependency: GradleDependency) {
 
 function moduleKotlinNamedArgumentVariableVersionFormatMatch(
   dependency: GradleDependency
-) {
+): RegExp {
   // prettier-ignore
   return new RegExp(
     `group\\s*=\\s*"${dependency.group}"\\s*,\\s*` +
@@ -219,7 +225,7 @@ function moduleKotlinNamedArgumentVariableVersionFormatMatch(
 
 function moduleStringVariableInterpolationVersionFormatMatch(
   dependency: GradleDependency
-) {
+): RegExp {
   return new RegExp(
     `["']${dependency.group}:${dependency.name}:\\$([^{].*?)["']`
   );
@@ -227,12 +233,12 @@ function moduleStringVariableInterpolationVersionFormatMatch(
 
 function moduleStringVariableExpressionVersionFormatMatch(
   dependency: GradleDependency
-) {
+): RegExp {
   return new RegExp(
     `["']${dependency.group}:${dependency.name}:\\$\{([^{].*?)}["']`
   );
 }
 
-function variableDefinitionFormatMatch(variable: string) {
+function variableDefinitionFormatMatch(variable: string): RegExp {
   return new RegExp(`(${variable}\\s*=\\s*?["'])(.*)(["'])`);
 }
diff --git a/lib/manager/gradle/gradle-updates-report.ts b/lib/manager/gradle/gradle-updates-report.ts
index f83c8d35d8fe50fdf8fdb63eaa18af7546cba1fb..3bf70518ffa3592af6d0e45eb89ae7afedbbebb8 100644
--- a/lib/manager/gradle/gradle-updates-report.ts
+++ b/lib/manager/gradle/gradle-updates-report.ts
@@ -67,7 +67,9 @@ gradle.buildFinished {
   await writeFile(gradleInitFile, content);
 }
 
-async function extractDependenciesFromUpdatesReport(localDir: string) {
+async function extractDependenciesFromUpdatesReport(
+  localDir: string
+): Promise<BuildDependency[]> {
   const gradleProjectConfigurations = await readGradleReport(localDir);
 
   const dependencies = gradleProjectConfigurations
@@ -111,7 +113,7 @@ function mergeDependenciesWithRepositories(
 function flatternDependencies(
   accumulator: GradleDependencyWithRepos[],
   currentValue: GradleDependencyWithRepos[]
-) {
+): GradleDependencyWithRepos[] {
   accumulator.push(...currentValue);
   return accumulator;
 }
diff --git a/lib/manager/gradle/index.ts b/lib/manager/gradle/index.ts
index fd3a572de5d29d4aa7825e0e446c8692a5a541b8..2ff7ebc90e9a58f6a9c6cc5326e8f3af5d8ab229 100644
--- a/lib/manager/gradle/index.ts
+++ b/lib/manager/gradle/index.ts
@@ -21,7 +21,7 @@ const TIMEOUT_CODE = 143;
 export async function extractAllPackageFiles(
   config: ExtractConfig,
   packageFiles: string[]
-): Promise<PackageFile[]> {
+): Promise<PackageFile[] | null> {
   if (
     !packageFiles.some(packageFile =>
       ['build.gradle', 'build.gradle.kts'].includes(packageFile)
@@ -117,7 +117,7 @@ async function executeGradle(config: ExtractConfig) {
   logger.info('Gradle report complete');
 }
 
-async function getGradleCommandLine(config: ExtractConfig) {
+async function getGradleCommandLine(config: ExtractConfig): Promise<string> {
   let cmd: string;
   const gradlewExists = await exists(config.localDir + '/gradlew');
   if (config.binarySource === 'docker') {
@@ -129,4 +129,5 @@ async function getGradleCommandLine(config: ExtractConfig) {
   }
   return cmd + ' ' + GRADLE_DEPENDENCY_REPORT_OPTIONS;
 }
+
 export const language = 'java';
diff --git a/lib/manager/homebrew/extract.ts b/lib/manager/homebrew/extract.ts
index c4c51b0f047907083ad193731e63845cc42c37b3..ccc51351070e6f03a2a2b7c87a5c852c8ef801e3 100644
--- a/lib/manager/homebrew/extract.ts
+++ b/lib/manager/homebrew/extract.ts
@@ -4,7 +4,7 @@ import { logger } from '../../logger';
 import { PackageFile, PackageDependency } from '../common';
 
 // TODO: Maybe check if quotes/double-quotes are balanced
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   logger.trace('extractPackageFile()');
   /*
     1. match "class className < Formula"
@@ -57,7 +57,7 @@ export function extractPackageFile(content: string): PackageFile {
   return { deps };
 }
 
-function extractSha256(content: string) {
+function extractSha256(content: string): string | null {
   const sha256RegExp = /(^|\s)sha256(\s)/;
   let i = content.search(sha256RegExp);
   if (isSpace(content[i])) {
@@ -66,7 +66,7 @@ function extractSha256(content: string) {
   return parseSha256(i, content);
 }
 
-function parseSha256(idx: number, content: string) {
+function parseSha256(idx: number, content: string): string | null {
   let i = idx;
   i += 'sha256'.length;
   i = skip(i, content, c => {
@@ -84,7 +84,7 @@ function parseSha256(idx: number, content: string) {
   return sha256;
 }
 
-function extractUrl(content: string) {
+function extractUrl(content: string): string | null {
   const urlRegExp = /(^|\s)url(\s)/;
   let i = content.search(urlRegExp);
   // content.search() returns -1 if not found
@@ -98,7 +98,13 @@ function extractUrl(content: string) {
   return parseUrl(i, content);
 }
 
-export function parseUrlPath(urlStr: string) {
+export interface UrlPathParsedResult {
+  currentValue: string;
+  ownerName: string;
+  repoName: string;
+}
+
+export function parseUrlPath(urlStr: string): UrlPathParsedResult | null {
   if (!urlStr) {
     return null;
   }
@@ -136,7 +142,7 @@ export function parseUrlPath(urlStr: string) {
   }
 }
 
-function parseUrl(idx: number, content: string) {
+function parseUrl(idx: number, content: string): string | null {
   let i = idx;
   i += 'url'.length;
   i = skip(i, content, c => {
@@ -155,7 +161,7 @@ function parseUrl(idx: number, content: string) {
   return url;
 }
 
-function extractClassName(content: string) {
+function extractClassName(content: string): string | null {
   const classRegExp = /(^|\s)class\s/;
   let i = content.search(classRegExp);
   if (isSpace(content[i])) {
@@ -166,7 +172,7 @@ function extractClassName(content: string) {
 
 /* This function parses the "class className < Formula" header
    and returns the className and index of the character just after the header */
-function parseClassHeader(idx: number, content: string) {
+function parseClassHeader(idx: number, content: string): string | null {
   let i = idx;
   i += 'class'.length;
   i = skip(i, content, c => {
diff --git a/lib/manager/homebrew/update.ts b/lib/manager/homebrew/update.ts
index a228bb5c1ef91dbcc900cd1c225e288759f88819..f9f8009916ef0592863814cceae8c5185cf4621f 100644
--- a/lib/manager/homebrew/update.ts
+++ b/lib/manager/homebrew/update.ts
@@ -77,7 +77,11 @@ export async function updateDependency(
   return newContent;
 }
 
-function updateUrl(content: string, oldUrl: string, newUrl: string) {
+function updateUrl(
+  content: string,
+  oldUrl: string,
+  newUrl: string
+): string | null {
   const urlRegExp = /(^|\s)url(\s)/;
   let i = content.search(urlRegExp);
   if (i === -1) {
@@ -102,7 +106,11 @@ function updateUrl(content: string, oldUrl: string, newUrl: string) {
   return newContent;
 }
 
-function getUrlTestContent(content: string, oldUrl: string, newUrl: string) {
+function getUrlTestContent(
+  content: string,
+  oldUrl: string,
+  newUrl: string
+): string {
   const urlRegExp = /(^|\s)url(\s)/;
   const cleanContent = removeComments(content);
   let j = cleanContent.search(urlRegExp);
@@ -118,7 +126,7 @@ function replaceUrl(
   content: string,
   oldUrl: string,
   newUrl: string
-) {
+): string | null {
   let i = idx;
   i += 'url'.length;
   i = skip(i, content, c => isSpace(c));
@@ -132,7 +140,11 @@ function replaceUrl(
   return newContent;
 }
 
-function updateSha256(content: string, oldSha256: string, newSha256: string) {
+function updateSha256(
+  content: string,
+  oldSha256: string,
+  newSha256: string
+): string | null {
   const sha256RegExp = /(^|\s)sha256(\s)/;
   let i = content.search(sha256RegExp);
   if (i === -1) {
@@ -161,7 +173,7 @@ function getSha256TestContent(
   content: string,
   oldSha256: string,
   newSha256: string
-) {
+): string | null {
   const sha256RegExp = /(^|\s)sha256(\s)/;
   const cleanContent = removeComments(content);
   let j = cleanContent.search(sha256RegExp);
@@ -177,7 +189,7 @@ function replaceSha256(
   content: string,
   oldSha256: string,
   newSha256: string
-) {
+): string | null {
   let i = idx;
   i += 'sha256'.length;
   i = skip(i, content, c => isSpace(c));
diff --git a/lib/manager/homebrew/util.ts b/lib/manager/homebrew/util.ts
index 83e3e89e2299c4fed84957dc8d7e633d2d719cc9..54ea340c43d1914241a6a4be9b48d7d17c76b7f8 100644
--- a/lib/manager/homebrew/util.ts
+++ b/lib/manager/homebrew/util.ts
@@ -2,7 +2,7 @@ export function skip(
   idx: number,
   content: string,
   cond: (s: string) => boolean
-) {
+): number {
   let i = idx;
   while (i < content.length) {
     if (!cond(content[i])) {
@@ -13,18 +13,18 @@ export function skip(
   return i;
 }
 
-export function isSpace(c: string) {
+export function isSpace(c: string): boolean {
   return /\s/.test(c);
 }
 
-export function removeComments(content: string) {
+export function removeComments(content: string): string {
   let newContent = removeLineComments(content);
   newContent = removeMultiLineComments(newContent);
   return newContent;
 }
 
 // Remove line comments starting with #
-function removeLineComments(content: string) {
+function removeLineComments(content: string): string {
   let newContent = '';
   let comment = false;
   for (let i = 0; i < content.length; i += 1) {
@@ -45,7 +45,7 @@ function removeLineComments(content: string) {
 }
 
 // Remove multi-line comments enclosed between =begin and =end
-function removeMultiLineComments(content: string) {
+function removeMultiLineComments(content: string): string {
   const beginRegExp = /(^|\n)=begin\s/;
   const endRegExp = /(^|\n)=end\s/;
   let newContent = content;
diff --git a/lib/manager/index.ts b/lib/manager/index.ts
index 0467781cff4a4b65a50a4f0140345e2b67d9a93c..d6f49eff05e6e39ec467fbe12d337576fbacae1f 100644
--- a/lib/manager/index.ts
+++ b/lib/manager/index.ts
@@ -1,9 +1,13 @@
 import {
-  ManagerApi,
   ExtractConfig,
-  RangeConfig,
+  ManagerApi,
+  PackageFile,
   PackageUpdateConfig,
+  RangeConfig,
+  Result,
+  PackageUpdateResult,
 } from './common';
+import { RangeStrategy } from '../versioning';
 
 const managerList = [
   'ansible',
@@ -63,25 +67,25 @@ const languageList = [
 
 export const get = <T extends keyof ManagerApi>(manager: string, name: T) =>
   managers[manager][name];
-export const getLanguageList = () => languageList;
-export const getManagerList = () => managerList;
+export const getLanguageList = (): string[] => languageList;
+export const getManagerList = (): string[] => managerList;
 
 export function extractAllPackageFiles(
   manager: string,
   config: ExtractConfig,
   files: string[]
-) {
-  return managers[manager] && get(manager, 'extractAllPackageFiles')
-    ? get(manager, 'extractAllPackageFiles')(config, files)
+): Result<PackageFile[] | null> {
+  return managers[manager] && managers[manager].extractAllPackageFiles
+    ? managers[manager].extractAllPackageFiles(config, files)
     : null;
 }
 
 export function getPackageUpdates(
   manager: string,
   config: PackageUpdateConfig
-) {
-  return managers[manager] && get(manager, 'getPackageUpdates')
-    ? get(manager, 'getPackageUpdates')(config)
+): Result<PackageUpdateResult[]> | null {
+  return managers[manager] && managers[manager].getPackageUpdates
+    ? managers[manager].getPackageUpdates(config)
     : null;
 }
 
@@ -90,13 +94,13 @@ export function extractPackageFile(
   content: string,
   fileName?: string,
   config?: ExtractConfig
-) {
-  return managers[manager] && get(manager, 'extractPackageFile')
-    ? get(manager, 'extractPackageFile')(content, fileName, config)
+): Result<PackageFile | null> {
+  return managers[manager] && managers[manager].extractPackageFile
+    ? managers[manager].extractPackageFile(content, fileName, config)
     : null;
 }
 
-export function getRangeStrategy(config: RangeConfig) {
+export function getRangeStrategy(config: RangeConfig): RangeStrategy {
   const { manager, rangeStrategy } = config;
   if (managers[manager].getRangeStrategy) {
     // Use manager's own function if it exists
diff --git a/lib/manager/kubernetes/extract.ts b/lib/manager/kubernetes/extract.ts
index 21a7709ff61de782b271ed8faee5c04326e8c595..9007fa323ecb639e3e3717b44ff0122ca27a2055 100644
--- a/lib/manager/kubernetes/extract.ts
+++ b/lib/manager/kubernetes/extract.ts
@@ -2,7 +2,7 @@ import { logger } from '../../logger';
 import { getDep } from '../dockerfile/extract';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   logger.trace('kubernetes.extractPackageFile()');
   let deps: PackageDependency[] = [];
   let lineNumber = 0;
diff --git a/lib/manager/kubernetes/update.ts b/lib/manager/kubernetes/update.ts
index 56418fab2fce10372c39d621e51ebe9267a3f389..0c16c1a23fe27c7148d124a1cdd11aa39fd5207d 100644
--- a/lib/manager/kubernetes/update.ts
+++ b/lib/manager/kubernetes/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const newFrom = getNewFrom(upgrade);
     logger.debug(`kubernetes.updateDependency(): ${newFrom}`);
diff --git a/lib/manager/leiningen/extract.ts b/lib/manager/leiningen/extract.ts
index dc3864a35b4a032553249f121c51e8bbe5530626..6735329cfa8fe5263d29045292f1b6be54a6a36f 100644
--- a/lib/manager/leiningen/extract.ts
+++ b/lib/manager/leiningen/extract.ts
@@ -3,7 +3,7 @@ import { PackageDependency, PackageFile } from '../common';
 
 export const DEFAULT_CLOJARS_REPO = 'https://clojars.org/repo/';
 
-export function trimAtKey(str: string, kwName: string) {
+export function trimAtKey(str: string, kwName: string): string | null {
   const regex = new RegExp(`:${kwName}(?=\\s)`);
   const keyOffset = str.search(regex);
   if (keyOffset < 0) return null;
@@ -13,7 +13,7 @@ export function trimAtKey(str: string, kwName: string) {
   return withSpaces.slice(valueOffset);
 }
 
-export function expandDepName(name: string) {
+export function expandDepName(name: string): string {
   return name.indexOf('/') === -1 ? `${name}:${name}` : name.replace('/', ':');
 }
 
@@ -89,7 +89,7 @@ export function extractFromVectors(
   return result;
 }
 
-function extractLeinRepos(content: string) {
+function extractLeinRepos(content: string): string[] {
   const result = [DEFAULT_CLOJARS_REPO, DEFAULT_MAVEN_REPO];
 
   const repoContent = trimAtKey(
diff --git a/lib/manager/meteor/extract.ts b/lib/manager/meteor/extract.ts
index face708d11c227647c1e1417b238d5114e8eeab5..c62f1da4b471516e165ae6430e0a9cbb6662e068 100644
--- a/lib/manager/meteor/extract.ts
+++ b/lib/manager/meteor/extract.ts
@@ -1,7 +1,7 @@
 import { logger } from '../../logger';
 import { PackageFile, PackageDependency } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   let deps: PackageDependency[] = [];
   const npmDepends = content.match(/\nNpm\.depends\({([\s\S]*?)}\);/);
   if (!npmDepends) {
diff --git a/lib/manager/meteor/update.ts b/lib/manager/meteor/update.ts
index eb0e6c5b09b446ac1bf5889ebb35ad3fbec96546..c84a535bce50db11e4c6d5fbedcbb80107fed5d8 100644
--- a/lib/manager/meteor/update.ts
+++ b/lib/manager/meteor/update.ts
@@ -1,7 +1,10 @@
 import { logger } from '../../logger';
 import { Upgrade } from '../common';
 
-export function updateDependency(fileContent: string, upgrade: Upgrade) {
+export function updateDependency(
+  fileContent: string,
+  upgrade: Upgrade
+): string {
   const { depName, currentValue, newValue } = upgrade;
   logger.debug(`meteor.updateDependency(): ${depName} = ${newValue}`);
   const regexReplace = new RegExp(
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index 8e023fc442ff959b3d670c9abc243b38d8a33ca8..116e41b799731b78e497c764768c8f8e3b66e0ff 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -44,7 +44,7 @@ export async function extractPackageFile(
   content: string,
   fileName: string,
   config: ExtractConfig
-): Promise<PackageFile> {
+): Promise<PackageFile | null> {
   logger.trace(`npm.extractPackageFile(${fileName})`);
   logger.trace({ content });
   const deps: PackageDependency[] = [];
diff --git a/lib/manager/npm/extract/monorepo.ts b/lib/manager/npm/extract/monorepo.ts
index 22834edded159d134250ad4c890d15ad170df5a2..64adb9ebb15ed4b5be664545c86960cb6058b063 100644
--- a/lib/manager/npm/extract/monorepo.ts
+++ b/lib/manager/npm/extract/monorepo.ts
@@ -6,7 +6,7 @@ import upath from 'upath';
 import { logger } from '../../../logger';
 import { PackageFile } from '../../common';
 
-function matchesAnyPattern(val: string, patterns: string[]) {
+function matchesAnyPattern(val: string, patterns: string[]): boolean {
   const res = patterns.some(
     pattern => pattern === val + '/' || minimatch(val, pattern, { dot: true })
   );
diff --git a/lib/manager/npm/extract/type.ts b/lib/manager/npm/extract/type.ts
index addc7d2f33426d5449b472bbe1dfdaf9c395d65b..bf8ded344ba172d7c3091b4b3d5cfeab75c436a8 100644
--- a/lib/manager/npm/extract/type.ts
+++ b/lib/manager/npm/extract/type.ts
@@ -1,6 +1,6 @@
 import { NpmPackage } from './common';
 
-export function mightBeABrowserLibrary(packageJson: NpmPackage) {
+export function mightBeABrowserLibrary(packageJson: NpmPackage): boolean {
   // return true unless we're sure it's not a browser library
   if (packageJson.private === true) {
     // it's not published
diff --git a/lib/manager/npm/update.ts b/lib/manager/npm/update.ts
index f7f5a5efe0d60f1d67551e07b7be73d58060132b..5d9d7de4abee573799f35730ea6e48822f112d63 100644
--- a/lib/manager/npm/update.ts
+++ b/lib/manager/npm/update.ts
@@ -6,7 +6,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   const { depType, depName } = upgrade;
   let { newValue } = upgrade;
   if (upgrade.currentRawValue) {
@@ -137,7 +137,7 @@ export function updateDependency(
 }
 
 // Return true if the match string is found at index in content
-function matchAt(content: string, index: number, match: string) {
+function matchAt(content: string, index: number, match: string): boolean {
   return content.substring(index, index + match.length) === match;
 }
 
@@ -147,7 +147,7 @@ function replaceAt(
   index: number,
   oldString: string,
   newString: string
-) {
+): string {
   logger.debug(`Replacing ${oldString} with ${newString} at index ${index}`);
   return (
     content.substr(0, index) +
@@ -160,7 +160,7 @@ export function bumpPackageVersion(
   content: string,
   currentValue: string,
   bumpVersion: ReleaseType | string
-) {
+): string {
   logger.debug('bumpVersion()');
   if (!bumpVersion) {
     return content;
diff --git a/lib/manager/nuget/update.ts b/lib/manager/nuget/update.ts
index 6869ded841b2c222b1ea6339b1484e7ace76070b..b2d437b931a6764c77fe798aeae031796bbcb693 100644
--- a/lib/manager/nuget/update.ts
+++ b/lib/manager/nuget/update.ts
@@ -4,7 +4,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     logger.debug(`nuget.updateDependency(): ${upgrade.newFrom}`);
     const lines = fileContent.split('\n');
diff --git a/lib/manager/nvm/update.ts b/lib/manager/nvm/update.ts
index cd6d4eefb51e124468a85054b989b807049d4468..0ad7ac1ada89fc5b2ba62c0548995e97a41f171a 100644
--- a/lib/manager/nvm/update.ts
+++ b/lib/manager/nvm/update.ts
@@ -1,7 +1,10 @@
 import { logger } from '../../logger';
 import { Upgrade } from '../common';
 
-export function updateDependency(_fileContent: string, upgrade: Upgrade) {
+export function updateDependency(
+  _fileContent: string,
+  upgrade: Upgrade
+): string {
   logger.debug(`nvm.updateDependency(): ${upgrade.newVersion}`);
   return `${upgrade.newValue}\n`;
 }
diff --git a/lib/manager/pip_requirements/extract.ts b/lib/manager/pip_requirements/extract.ts
index 37efc021630ae3234bb941dd88e37d92b71de4bf..4d9d30273734e8b8345ecdf3577c6d300ff41645 100644
--- a/lib/manager/pip_requirements/extract.ts
+++ b/lib/manager/pip_requirements/extract.ts
@@ -17,7 +17,7 @@ export function extractPackageFile(
   content: string,
   _: string,
   config: ExtractConfig
-) {
+): PackageFile | null {
   logger.trace('pip_requirements.extractPackageFile()');
 
   let indexUrl: string;
diff --git a/lib/manager/pip_requirements/update.ts b/lib/manager/pip_requirements/update.ts
index 34061f6bb981c0d97e4f313f9d67e2b3d4fef76d..f8e72635328b13518fadd08f91e8342fa46d46e2 100644
--- a/lib/manager/pip_requirements/update.ts
+++ b/lib/manager/pip_requirements/update.ts
@@ -5,7 +5,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     logger.debug(`pip_requirements.updateDependency(): ${upgrade.newValue}`);
     const lines = fileContent.split('\n');
diff --git a/lib/manager/pip_setup/extract.ts b/lib/manager/pip_setup/extract.ts
index 295216de48ae57d119890b9d9385601fc2f06cd4..cd427aeecad06047bc9f1661e77a9ecf9d367933 100644
--- a/lib/manager/pip_setup/extract.ts
+++ b/lib/manager/pip_setup/extract.ts
@@ -6,14 +6,14 @@ import { dependencyPattern } from '../pip_requirements/extract';
 import { ExtractConfig, PackageFile, PackageDependency } from '../common';
 
 export const pythonVersions = ['python', 'python3', 'python3.7'];
-let pythonAlias: string = null;
+let pythonAlias: string | null = null;
 
-export function parsePythonVersion(str: string) {
+export function parsePythonVersion(str: string): number[] {
   const arr = str.split(' ')[1].split('.');
   return [parseInt(arr[0], 10), parseInt(arr[1], 10)];
 }
 
-export async function getPythonAlias() {
+export async function getPythonAlias(): Promise<string> {
   if (pythonAlias) {
     return pythonAlias;
   }
@@ -89,7 +89,7 @@ export async function extractPackageFile(
   content: string,
   packageFile: string,
   config: ExtractConfig
-): Promise<PackageFile> {
+): Promise<PackageFile | null> {
   logger.debug('pip_setup.extractPackageFile()');
   let setup: PythonSetup;
   try {
diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts
index f4af20c5f8af7b33b300384a1f41e80ae059e5e4..dc5980d3acf513b401219168cea9cf8696191dae 100644
--- a/lib/manager/pipenv/artifacts.ts
+++ b/lib/manager/pipenv/artifacts.ts
@@ -10,7 +10,7 @@ export async function updateArtifacts(
   _updatedDeps: string[],
   newPipfileContent: string,
   config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[]> {
+): Promise<UpdateArtifactsResult[] | null> {
   logger.debug(`pipenv.updateArtifacts(${pipfileName})`);
   process.env.PIPENV_CACHE_DIR =
     process.env.PIPENV_CACHE_DIR || join(config.cacheDir, './others/pipenv');
diff --git a/lib/manager/pipenv/extract.ts b/lib/manager/pipenv/extract.ts
index 75eaeef9aaa08143ae7a20b3a47d0e6d36b18e70..16759d0f555ffe470fb95f0c04ef8a0fcb72151b 100644
--- a/lib/manager/pipenv/extract.ts
+++ b/lib/manager/pipenv/extract.ts
@@ -33,7 +33,7 @@ interface PipRequirement {
   git?: string;
 }
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   logger.debug('pipenv.extractPackageFile()');
 
   let pipfile: PipFile;
diff --git a/lib/manager/pipenv/update.ts b/lib/manager/pipenv/update.ts
index b283af298bad14c8a9a080a09835a1259b7e8527..b3450a6bee3fe18902a19da60ab030c6cec955ef 100644
--- a/lib/manager/pipenv/update.ts
+++ b/lib/manager/pipenv/update.ts
@@ -4,7 +4,7 @@ import { logger } from '../../logger';
 import { Upgrade } from '../common';
 
 // Return true if the match string is found at index in content
-function matchAt(content: string, index: number, match: string) {
+function matchAt(content: string, index: number, match: string): boolean {
   return content.substring(index, index + match.length) === match;
 }
 
@@ -14,7 +14,7 @@ function replaceAt(
   index: number,
   oldString: string,
   newString: string
-) {
+): string {
   logger.debug(`Replacing ${oldString} with ${newString} at index ${index}`);
   return (
     content.substr(0, index) +
@@ -26,7 +26,7 @@ function replaceAt(
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     const { depType, depName, newValue, managerData = {} } = upgrade;
     const { nestedVersion } = managerData;
diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts
index 7a165c214e2bd4f85ac15b50ffae63b583b1966f..ec20263e89838e7fd973c55223410ffa71b3f202 100644
--- a/lib/manager/poetry/artifacts.ts
+++ b/lib/manager/poetry/artifacts.ts
@@ -11,7 +11,7 @@ export async function updateArtifacts(
   updatedDeps: string[],
   newPackageFileContent: string,
   config: UpdateArtifactsConfig
-): Promise<UpdateArtifactsResult[]> {
+): Promise<UpdateArtifactsResult[] | null> {
   await logger.debug(`poetry.updateArtifacts(${packageFileName})`);
   if (updatedDeps === undefined || updatedDeps.length < 1) {
     logger.debug('No updated poetry deps - returning null');
diff --git a/lib/manager/poetry/extract.ts b/lib/manager/poetry/extract.ts
index 478ddad293ec32eaee86472bd4eedb39c6d201e7..6461754b6fc245714602d99288e146c5fe0c7ea5 100644
--- a/lib/manager/poetry/extract.ts
+++ b/lib/manager/poetry/extract.ts
@@ -7,7 +7,7 @@ import { PoetryFile, PoetrySection } from './types';
 export function extractPackageFile(
   content: string,
   fileName: string
-): PackageFile {
+): PackageFile | null {
   logger.trace(`poetry.extractPackageFile(${fileName})`);
   let pyprojectfile: PoetryFile;
   try {
diff --git a/lib/manager/poetry/update.ts b/lib/manager/poetry/update.ts
index b1321b17152aab04a76d80df3aae85398b08cc94..eb2598764c67f3128989f7ad3bc7358bb880e00c 100644
--- a/lib/manager/poetry/update.ts
+++ b/lib/manager/poetry/update.ts
@@ -6,7 +6,7 @@ import { PoetryFile } from './types';
 
 // TODO: Maybe factor out common code from pipenv.updateDependency and poetry.updateDependency
 // Return true if the match string is found at index in content
-function matchAt(content: string, index: number, match: string) {
+function matchAt(content: string, index: number, match: string): boolean {
   return content.substring(index, index + match.length) === match;
 }
 
@@ -16,7 +16,7 @@ function replaceAt(
   index: number,
   oldString: string,
   newString: string
-) {
+): string {
   logger.debug(`Replacing ${oldString} with ${newString} at index ${index}`);
   return (
     content.substr(0, index) +
@@ -28,7 +28,7 @@ function replaceAt(
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade<{ nestedVersion?: boolean }>
-): string {
+): string | null {
   logger.trace({ config: upgrade }, 'poetry.updateDependency()');
   if (!upgrade) {
     return null;
diff --git a/lib/manager/pub/extract.ts b/lib/manager/pub/extract.ts
index f2aa0ffb05d0434863b11567130ed26c77625c78..0ffdde1f6863df22c6ac6bfbc7a9fd19c6fb488c 100644
--- a/lib/manager/pub/extract.ts
+++ b/lib/manager/pub/extract.ts
@@ -34,7 +34,7 @@ function getDeps(
 export function extractPackageFile(
   content: string,
   packageFile: string
-): PackageFile {
+): PackageFile | null {
   try {
     const doc = safeLoad(content);
     const deps = [
diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts
index 5319390914da427d4fc25dd317df35b295b85de6..05e7a132cb52b0f8a7e391906ca837cc44d0f424 100644
--- a/lib/manager/sbt/extract.ts
+++ b/lib/manager/sbt/extract.ts
@@ -52,7 +52,10 @@ interface ParseContext {
   depType?: string;
 }
 
-function parseDepExpr(expr: string, ctx: ParseContext) {
+function parseDepExpr(
+  expr: string,
+  ctx: ParseContext
+): PackageDependency | null {
   const { scalaVersion, fileOffset, variables } = ctx;
   let { depType } = ctx;
 
@@ -139,7 +142,7 @@ function parseSbtLine(
   line: string,
   lineIndex: number,
   lines: string[]
-): PackageFile & ParseOptions {
+): (PackageFile & ParseOptions) | null {
   const { deps, registryUrls, fileOffset, variables } = acc;
 
   let { isMultiDeps, scalaVersion } = acc;
diff --git a/lib/manager/swift/extract.ts b/lib/manager/swift/extract.ts
index c55b10b1d3d1433f3d011ce37561b38c56db0ff8..80746f4e02090951e74f278381745ef1511234d1 100644
--- a/lib/manager/swift/extract.ts
+++ b/lib/manager/swift/extract.ts
@@ -47,7 +47,7 @@ const searchLabels = {
   exactVersion: EXACT_VERSION,
 };
 
-function searchKeysForState(state) {
+function searchKeysForState(state): string[] {
   switch (state) {
     case 'dependencies':
       return [SPACE, COLON, WILDCARD];
@@ -94,7 +94,7 @@ interface MatchResult {
   substr: string;
 }
 
-function getMatch(str: string, state: string): MatchResult {
+function getMatch(str: string, state: string): MatchResult | null {
   const keys = searchKeysForState(state);
   let result = null;
   for (let i = 0; i < keys.length; i += 1) {
@@ -117,7 +117,7 @@ function getMatch(str: string, state: string): MatchResult {
   return result;
 }
 
-function getDepName(url: string) {
+function getDepName(url: string): string | null {
   try {
     const { host, pathname } = new URL(url);
     if (host === 'github.com' || host === 'gitlab.com') {
@@ -135,7 +135,7 @@ function getDepName(url: string) {
 export function extractPackageFile(
   content: string,
   packageFile: string = null
-): PackageFile {
+): PackageFile | null {
   if (!content) return null;
 
   const result: PackageFile = {
diff --git a/lib/manager/swift/update.ts b/lib/manager/swift/update.ts
index 66131fc9568673a488c64405b7564efefa6e649e..b7725ff06bc9485f48cdf7d9346a8611c6e079e8 100644
--- a/lib/manager/swift/update.ts
+++ b/lib/manager/swift/update.ts
@@ -6,7 +6,7 @@ const fromParam = /^\s*from\s*:\s*"([^"]+)"\s*$/;
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   const { currentValue, newValue, fileReplacePosition } = upgrade;
   const leftPart = fileContent.slice(0, fileReplacePosition);
   const rightPart = fileContent.slice(fileReplacePosition);
diff --git a/lib/manager/terraform/extract.ts b/lib/manager/terraform/extract.ts
index 808a67e9ca9ed34879be1fbb5b25cfa4dcd1f79c..223b1bd622db661bb00271eeda216bbf53138c3f 100644
--- a/lib/manager/terraform/extract.ts
+++ b/lib/manager/terraform/extract.ts
@@ -2,7 +2,7 @@ import { logger } from '../../logger';
 import { isValid, isVersion } from '../../versioning/hashicorp';
 import { PackageDependency, PackageFile } from '../common';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   logger.trace({ content }, 'terraform.extractPackageFile()');
   if (!content.includes('module "')) {
     return null;
diff --git a/lib/manager/terraform/update.ts b/lib/manager/terraform/update.ts
index f7d08539b34b100924a5dddab8d83fac8e6fe6b1..56edfc743c8ffde58a76e2703971d043a047879d 100644
--- a/lib/manager/terraform/update.ts
+++ b/lib/manager/terraform/update.ts
@@ -4,7 +4,7 @@ import { Upgrade } from '../common';
 export function updateDependency(
   currentFileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     logger.debug(`terraform.updateDependency: ${upgrade.newValue}`);
     const lines = currentFileContent.split('\n');
diff --git a/lib/manager/travis/extract.ts b/lib/manager/travis/extract.ts
index bbcf0f0f677c8cdb562a3d804de0d68ad89f8e5a..554ecb7a718e14f46c9d484e4b38f036b5adc774 100644
--- a/lib/manager/travis/extract.ts
+++ b/lib/manager/travis/extract.ts
@@ -3,7 +3,7 @@ import yaml from 'js-yaml';
 import { PackageFile, PackageDependency } from '../common';
 import { logger } from '../../logger';
 
-export function extractPackageFile(content: string): PackageFile {
+export function extractPackageFile(content: string): PackageFile | null {
   let doc;
   try {
     doc = yaml.safeLoad(content);
diff --git a/lib/manager/travis/update.ts b/lib/manager/travis/update.ts
index e39c66691d9c9860c1e6189af5bc05defd6e97c2..fb09d1e54d75de512d63ac5a356326aa203612e1 100644
--- a/lib/manager/travis/update.ts
+++ b/lib/manager/travis/update.ts
@@ -6,7 +6,7 @@ import { logger } from '../../logger';
 export function updateDependency(
   fileContent: string,
   upgrade: Upgrade
-): string {
+): string | null {
   try {
     logger.debug(`travis.updateDependency(): ${upgrade.newValue}`);
     const indent = detectIndent(fileContent).indent || '  ';
diff --git a/test/manager/travis/__snapshots__/package.spec.ts.snap b/test/manager/travis/__snapshots__/package.spec.ts.snap
index 459fd7e257be8b8fe98ddf9c18c043b721d7de1a..86af8e5824434e25a3ee5fd1619fe19f7bf84d20 100644
--- a/test/manager/travis/__snapshots__/package.spec.ts.snap
+++ b/test/manager/travis/__snapshots__/package.spec.ts.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`lib/manager/node/package getPackageUpdates detects pinning 1`] = `
+exports[`lib/manager/travis/package getPackageUpdates detects pinning 1`] = `
 Array [
   Object {
     "isRange": true,
@@ -14,7 +14,7 @@ Array [
 ]
 `;
 
-exports[`lib/manager/node/package getPackageUpdates returns result if needing updates 1`] = `
+exports[`lib/manager/travis/package getPackageUpdates returns result if needing updates 1`] = `
 Array [
   Object {
     "isRange": true,
diff --git a/test/manager/travis/package.spec.ts b/test/manager/travis/package.spec.ts
index 7129210bd72a8a17fe7d5acb1b6e3dff83fd61e4..2433b1c059e7742e9a4a0366d13a41a18eb7d0a5 100644
--- a/test/manager/travis/package.spec.ts
+++ b/test/manager/travis/package.spec.ts
@@ -7,7 +7,7 @@ const getPkgReleases: any = _getPkgReleases;
 
 jest.mock('../../../lib/datasource/github');
 
-describe('lib/manager/node/package', () => {
+describe('lib/manager/travis/package', () => {
   describe('getPackageUpdates', () => {
     // TODO: should be `PackageUpdateConfig`
     let config: any;