Skip to content

Commit 312d66a

Browse files
committed
Fix require-extension to ignore extension if it's part of the package name (fixes #319)
1 parent 2153154 commit 312d66a

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

lib/rules/require-extension.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ var DEFAULTS = {
1414
extentions: ['.jsx']
1515
};
1616

17+
var PKG_REGEX = /^[^\.]((?!\/).)*$/;
18+
1719
// ------------------------------------------------------------------------------
1820
// Rule Definition
1921
// ------------------------------------------------------------------------------
2022

2123
module.exports = function(context) {
2224

25+
function isPackage(id) {
26+
return PKG_REGEX.test(id);
27+
}
28+
2329
function isRequire(expression) {
2430
return expression.callee.name === 'require';
2531
}
@@ -53,8 +59,9 @@ module.exports = function(context) {
5359

5460
CallExpression: function(node) {
5561
if (isRequire(node)) {
56-
var ext = getExtension(getId(node));
57-
if (isForbiddenExtension(ext)) {
62+
var id = getId(node);
63+
var ext = getExtension(id);
64+
if (!isPackage(id) && isForbiddenExtension(ext)) {
5865
context.report(node, 'Unable to require module with extension \'' + ext + '\'');
5966
}
6067
}

tests/lib/rules/require-extension.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ var RuleTester = require('eslint').RuleTester;
1717

1818
var REQUIRE_PACKAGE = 'require(\'eslint\')';
1919

20+
var REQUIRE_PACKAGE_JS = 'require(\'headroom.js\')';
21+
2022
var REQUIRE_JS = 'require(\'./index.js\')';
2123

2224
var REQUIRE_JSX = 'require(\'./index.jsx\')';
@@ -66,6 +68,9 @@ ruleTester.run('require-extension', rule, {
6668
}, {
6769
code: REQUIRE_JSX,
6870
options: [{extensions: ['.js']}]
71+
}, {
72+
code: REQUIRE_PACKAGE_JS,
73+
options: [{extensions: ['.js']}]
6974
}
7075
],
7176

0 commit comments

Comments
 (0)