diff --git a/index.js b/index.js index 803af30..c99b6ab 100644 --- a/index.js +++ b/index.js @@ -161,7 +161,7 @@ module.exports.lint = function lint(indexes, options, callback) { callback(null, formatLint(hierarchy( inputs - .filter(filterJS) + .filter(filterJS(options.extension)) .reduce(function (memo, file) { return memo.concat(parseFn(file)); }, []) diff --git a/lib/filter_js.js b/lib/filter_js.js index 8370983..1d98ecf 100644 --- a/lib/filter_js.js +++ b/lib/filter_js.js @@ -1,9 +1,11 @@ 'use strict'; +var path = require('path'); + /** * Node & browserify support requiring JSON files. JSON files can't be documented * with JSDoc or parsed with espree, so we filter them out before - * they reach documentation's machinery. + * they reach documentation's machinery. * This creates a filter function for use with Array.prototype.filter, which * expect as argument a file as an objectg with the 'file' property * @@ -13,22 +15,15 @@ * is in the extension whitelist */ function filterJS(extensions) { - if (!(extensions instanceof Array)) { - extensions = typeof extensions === 'string' ? [extensions] : []; - } - extensions.push('js'); + extensions = extensions || []; + if (typeof extensions === 'string') { + extensions = [extensions]; + } + extensions = extensions.concat('js'); return function (data) { - var extension; - for (var i = 0; i < extensions.length; i++) { - extension = extensions[i]; - if (data.file.slice(-(extension.length + 1)) === '.' + extension) { - return true; - } - } - - return false; + return extensions.indexOf(path.extname(data.file).substring(1)) !== -1; }; } diff --git a/test/bin.js b/test/bin.js index 1d78088..f133023 100644 --- a/test/bin.js +++ b/test/bin.js @@ -96,6 +96,15 @@ test('external modules option', function (t) { }); }); +test('extension option', function (t) { + documentation(['build fixture/extension/jsx.jsx ' + + '--extension=jsx'], function (err, data) { + t.ifError(err); + t.equal(data.length, 1, 'includes jsx file'); + t.end(); + }); +}); + test('invalid arguments', function (group) { group.test('bad -f option', function (t) { documentation(['build -f DOES-NOT-EXIST fixture/internal.input.js'], function (err) { diff --git a/test/fixture/extension/jsx.jsx b/test/fixture/extension/jsx.jsx new file mode 100644 index 0000000..0027ec3 --- /dev/null +++ b/test/fixture/extension/jsx.jsx @@ -0,0 +1,4 @@ +/** + * apples + */ +function apples() {}