From 44e4444747c0abd14e351a16705b42a83b101ac9 Mon Sep 17 00:00:00 2001 From: Juuso Backman Date: Tue, 18 Nov 2014 10:38:51 +0200 Subject: [PATCH 1/2] Don't bail out in case of parsing errors; emit compile error event to UI --- lib/modules/kss-splitter.js | 19 +++--- lib/modules/kss.js | 117 ++++++++++++++++++------------------ lib/styleguide.js | 6 +- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/lib/modules/kss-splitter.js b/lib/modules/kss-splitter.js index c6d572c1..40b03444 100644 --- a/lib/modules/kss-splitter.js +++ b/lib/modules/kss-splitter.js @@ -1,4 +1,4 @@ -'use strict' +'use strict'; var gonzales = require('gonzales-pe'), gonzo = require('gonzales-ast'); @@ -7,10 +7,8 @@ module.exports = { /* Split string source into array of code and comment blocks */ pureSplitter: function(source, syntax) { - syntax = syntax || 'scss'; - var out = {}, - ast = gonzales.srcToAST({ + var ast = gonzales.srcToAST({ src: source, syntax: syntax }), @@ -20,7 +18,7 @@ module.exports = { gonzo.traverse(ast, [{ // Visitor for SASS and SCSS syntaxes - test: function(name, nodes) { + test: function(name) { return name !== 'stylesheet'; }, process: function(nodes) { @@ -68,13 +66,13 @@ module.exports = { }]); // push last block - blocks.push(block); + if (block) { + blocks.push(block); + } return blocks; - }, getBlocks: function(source, syntax) { - var blocks = this.pureSplitter(source, syntax), pair = { kss: '', @@ -82,10 +80,9 @@ module.exports = { }, firstBlock = true, pairs = [], - isKssMarkupBlock = /Styleguide [0-9]+/ + isKssMarkupBlock = /Styleguide [0-9]+/; blocks.forEach(function(block) { - if (block.type == 'comment') { // Check if KSS if (isKssMarkupBlock.test(block.content)) { @@ -118,4 +115,4 @@ module.exports = { return pairs; } -} +}; diff --git a/lib/modules/kss.js b/lib/modules/kss.js index 84b32594..7aad69e8 100644 --- a/lib/modules/kss.js +++ b/lib/modules/kss.js @@ -48,77 +48,76 @@ function sanitize(string) { } function processBlock(block, options, json) { - var blockPromise = Q.defer(); - - kss.parse(block.kss, options, function(err, styleguide) { - var section, - blockStyles; - if (err) { - new PluginError(PLUGIN_NAME, 'Error parsing', err); - blockPromise.resolve(); - return false; - } else { - section = jsonSections(styleguide.section()); - - if (section.length > 0) { - if (section.length > 1) { - console.warn('Warning: KSS splitter returned more than 1 KSS block. Styleguide might not be properly generated.'); + return Q.Promise(function(resolve, reject) { + kss.parse(block.kss, options, function(err, styleguide) { + var section, + blockStyles; + if (err) { + console.error(' error processing kss block', err); + reject(err); + return false; + } else { + section = jsonSections(styleguide.section()); + + if (section.length > 0) { + if (section.length > 1) { + console.warn('Warning: KSS splitter returned more than 1 KSS block. Styleguide might not be properly generated.'); + } + blockStyles = trimLinebreaks(block.code); + + // Add related CSS to section + if (blockStyles && blockStyles !== '') { + section[0].css = blockStyles; + } + json.sections = json.sections.concat(section); } - blockStyles = trimLinebreaks(block.code); - - // Add related CSS to section - if (blockStyles && blockStyles !== '') { - section[0].css = blockStyles; - } - json.sections = json.sections.concat(section); + resolve(); } - blockPromise.resolve(); - } + }); }); - return blockPromise; } function processFile(contents, syntax, options, json) { - var filePromise = Q.defer(), - blockPromises = [], - splittedFile = kssSplitter.getBlocks(contents, syntax); - - // Process every block in the current file - splittedFile.forEach(function(block) { - blockPromises.push(processBlock(block, options, json)); - }); - - Q.all(blockPromises).then(function() { - // All blocks are processed, resolve file promise - filePromise.resolve(); + return Q.Promise(function(resolve, reject) { + try { + var blockPromises = [], + blocks = kssSplitter.getBlocks(contents, syntax); + + // Process every block in the current file + blocks.forEach(function(block) { + blockPromises.push(processBlock(block, options, json)); + }); + } catch (err) { + console.error(' getting kss blocks failed', err); + reject(err); + } + Q.all(blockPromises).then(resolve); }); - - return filePromise; } module.exports = { // Parse node-kss object ( {'file.path': 'file.contents.toString('utf8'}' ) parseKSS: function(files, options) { - var parsePromise = Q.defer(), - json = { - sections: [] - }, - filePromises = [], - fileKeys = Object.keys(files); - - fileKeys.forEach(function(filePath) { - var contents = files[filePath], - syntax = path.extname(filePath).substring(1); - filePromises.push(processFile(contents, syntax, options, json)); - }); - - Q.all(filePromises).then(function() { - // All files are processed. Sort results and call main promise - json.sections = _.sortBy(json.sections, function(section) { - return section.reference; + return Q.Promise(function(resolve, reject) { + var json = { + sections: [] + }, + filePromises = [], + fileKeys = Object.keys(files); + + fileKeys.forEach(function(filePath) { + var contents = files[filePath], + syntax = path.extname(filePath).substring(1); + filePromises.push(processFile(contents, syntax, options, json)); }); - parsePromise.resolve(json); + + Q.all(filePromises).then(function() { + // All files are processed. Sort results and call main promise + json.sections = _.sortBy(json.sections, function(section) { + return section.reference; + }); + resolve(json); + }).catch(reject); }); - return parsePromise.promise; } -} +}; diff --git a/lib/styleguide.js b/lib/styleguide.js index 82ed5d52..25b50fb3 100644 --- a/lib/styleguide.js +++ b/lib/styleguide.js @@ -212,10 +212,14 @@ module.exports = function(options) { emitCompileSuccess(); }) .catch(function(error) { - console.error('Style guide parsing failed:', error.message); + console.error(error.toString()); emitCompileError(error); }) .finally(callback); + }).catch(function(error) { + console.error(error.toString()); + emitCompileError(error); + callback(); }); } ).on('error', console.error.bind(console)); From 16eca50f52aa0b127030f9283ed65280449592e1 Mon Sep 17 00:00:00 2001 From: Juuso Backman Date: Tue, 18 Nov 2014 10:58:55 +0200 Subject: [PATCH 2/2] Remove unnecessary console logging --- lib/modules/kss.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/modules/kss.js b/lib/modules/kss.js index 7aad69e8..aa9a4e2d 100644 --- a/lib/modules/kss.js +++ b/lib/modules/kss.js @@ -88,7 +88,6 @@ function processFile(contents, syntax, options, json) { blockPromises.push(processBlock(block, options, json)); }); } catch (err) { - console.error(' getting kss blocks failed', err); reject(err); } Q.all(blockPromises).then(resolve);