From e726d1c4e177a54729f22d91f3d8a5dc04694781 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Mon, 4 Jan 2016 22:30:27 +0100 Subject: [PATCH] fix(preprocessor): Improve handling of failed preprocessors Closes #1521 --- lib/preprocessor.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/preprocessor.js b/lib/preprocessor.js index d8569177f..0a8c815d2 100644 --- a/lib/preprocessor.js +++ b/lib/preprocessor.js @@ -27,8 +27,10 @@ var createPreprocessor = function (config, basePath, injector) { return } + var p + try { - instances[name] = injector.get('preprocessor:' + name) + p = injector.get('preprocessor:' + name) } catch (e) { if (e.message.indexOf('No provider for "preprocessor:' + name + '"') !== -1) { log.warn('Can not load "%s", it is not registered!\n ' + @@ -39,6 +41,8 @@ var createPreprocessor = function (config, basePath, injector) { alreadyDisplayedWarnings[name] = true } + + return p } patterns.forEach(function (pattern) { @@ -80,10 +84,21 @@ var createPreprocessor = function (config, basePath, injector) { config[patterns[i]].join(', '), file.originalPath) } else { config[patterns[i]].forEach(function (name) { - if (!instances[name]) { - instantiatePreprocessor(name) + var p = instances[name] + if (p == null) { + p = instantiatePreprocessor(name) } - preprocessors.push(instances[name]) + + if (p == null) { + if (!alreadyDisplayedWarnings[name]) { + alreadyDisplayedWarnings[name] = true + log.warn('Failed to instantiate preprocessor %s', name) + } + return + } + + instances[name] = p + preprocessors.push(p) }) } }