From 229cc212939826dfe06c4605eb5594b8c8b1a01e Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Sun, 23 Apr 2017 23:57:11 +0200 Subject: [PATCH] Remove deprecated require-extension rule --- docs/rules/require-extension.md | 48 ------------ index.js | 1 - lib/rules/require-extension.js | 113 --------------------------- tests/lib/rules/require-extension.js | 100 ------------------------ 4 files changed, 262 deletions(-) delete mode 100644 docs/rules/require-extension.md delete mode 100644 lib/rules/require-extension.js delete mode 100644 tests/lib/rules/require-extension.js diff --git a/docs/rules/require-extension.md b/docs/rules/require-extension.md deleted file mode 100644 index 095ef7a78c..0000000000 --- a/docs/rules/require-extension.md +++ /dev/null @@ -1,48 +0,0 @@ -# Restrict file extensions that may be required (require-extension) - -**Deprecation notice**: This rule is deprecated. Please use the eslint-plugin-import [extensions](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md) rule instead. - -`require()` statements should generally not include a file extension as there is a well defined mechanism for resolving a module ID to a specific file. This rule inspects the module ID being required and creates a warning if the ID contains a '.jsx' file extension. - -Note: this rule does not prevent required files from containing these extensions, it merely prevents the extension from being included in the `require()` statement. - -## Rule Details - -The following patterns are considered warnings: - -```js -var index = require('./index.jsx'); - -// When [1, {extensions: ['.js']}] -var index = require('./index.js'); -``` - -The following patterns are not considered warnings: - -```js -var index = require('./index'); - -var eslint = require('eslint'); -``` - -## Rule Options - -The set of forbidden extensions is configurable. By default '.jsx' is blocked. If you wanted to forbid both '.jsx' and '.js', the configuration would be: - -```js -"rules": { - "react/require-extension": [1, { "extensions": [".js", ".jsx"] }], -} -``` - -To configure WebPack to resolve '.jsx' add the following to `webpack.config.js`: - -```js -resolve: { - extensions: ["", ".js", ".jsx"] - }, -``` - -## When Not To Use It - -If you have file in your project with a '.jsx' file extension and do not have `require()` configured to automatically resolve '.jsx' files. diff --git a/index.js b/index.js index 4812464a17..38f2c5ef20 100644 --- a/index.js +++ b/index.js @@ -62,7 +62,6 @@ var allRules = { 'no-children-prop': require('./lib/rules/no-children-prop'), 'void-dom-elements-no-children': require('./lib/rules/void-dom-elements-no-children'), 'no-comment-textnodes': require('./lib/rules/no-comment-textnodes'), - 'require-extension': require('./lib/rules/require-extension'), 'wrap-multilines': require('./lib/rules/wrap-multilines'), 'jsx-tag-spacing': require('./lib/rules/jsx-tag-spacing') }; diff --git a/lib/rules/require-extension.js b/lib/rules/require-extension.js deleted file mode 100644 index 7b1bb23280..0000000000 --- a/lib/rules/require-extension.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @fileoverview Restrict file extensions that may be required - * @author Scott Andrews - * @deprecated - */ -'use strict'; - -var path = require('path'); -var isWarnedForDeprecation = false; - -// ------------------------------------------------------------------------------ -// Constants -// ------------------------------------------------------------------------------ - -var DEFAULTS = { - extensions: ['.jsx'] -}; - -var PKG_REGEX = /^[^\.]((?!\/).)*$/; - -// ------------------------------------------------------------------------------ -// Rule Definition -// ------------------------------------------------------------------------------ - -module.exports = { - meta: { - deprecated: true, - docs: { - description: 'Restrict file extensions that may be required', - category: 'Stylistic Issues', - recommended: false - }, - - schema: [{ - type: 'object', - properties: { - extensions: { - type: 'array', - items: { - type: 'string' - } - } - }, - additionalProperties: false - }] - }, - - create: function(context) { - - function isPackage(id) { - return PKG_REGEX.test(id); - } - - function isRequire(expression) { - return expression.callee.name === 'require'; - } - - function getId(expression) { - return expression.arguments[0] && expression.arguments[0].value; - } - - function getExtension(id) { - return path.extname(id || ''); - } - - function getExtensionsConfig() { - return context.options[0] && context.options[0].extensions || DEFAULTS.extensions; - } - - var forbiddenExtensions = getExtensionsConfig().reduce(function (extensions, extension) { - extensions[extension] = true; - return extensions; - }, Object.create(null)); - - function isForbiddenExtension(ext) { - return ext in forbiddenExtensions; - } - - // -------------------------------------------------------------------------- - // Public - // -------------------------------------------------------------------------- - - return { - - CallExpression: function(node) { - if (isRequire(node)) { - var id = getId(node); - var ext = getExtension(id); - if (!isPackage(id) && isForbiddenExtension(ext)) { - context.report({ - node: node, - message: `Unable to require module with extension '${ext}'` - }); - } - } - }, - - Program: function() { - if (isWarnedForDeprecation || /\=-(f|-format)=/.test(process.argv.join('='))) { - return; - } - - /* eslint-disable no-console */ - console.log('The react/require-extension rule is deprecated. Please ' + - 'use the import/extensions rule from eslint-plugin-import instead.'); - /* eslint-enable no-console */ - isWarnedForDeprecation = true; - } - - }; - - } -}; diff --git a/tests/lib/rules/require-extension.js b/tests/lib/rules/require-extension.js deleted file mode 100644 index 8fb037c580..0000000000 --- a/tests/lib/rules/require-extension.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * @fileoverview Restrict file extensions that may be required - * @author Scott Andrews - */ -'use strict'; - -// ------------------------------------------------------------------------------ -// Requirements -// ------------------------------------------------------------------------------ - -var rule = require('../../../lib/rules/require-extension'); -var RuleTester = require('eslint').RuleTester; - -// ------------------------------------------------------------------------------ -// Code Snippets -// ------------------------------------------------------------------------------ - -var REQUIRE_PACKAGE = 'require(\'eslint\')'; - -var REQUIRE_PACKAGE_JS = 'require(\'headroom.js\')'; - -var REQUIRE_JS = 'require(\'./index.js\')'; - -var REQUIRE_JSX = 'require(\'./index.jsx\')'; - -var REQUIRE_JSON = 'require(\'./index.json\')'; - -var REQUIRE_EMPTY = 'require()'; - -var REQUIRE_OBJECT = 'require({})'; - -// ------------------------------------------------------------------------------ -// Tests -// ------------------------------------------------------------------------------ - -var ruleTester = new RuleTester(); -ruleTester.run('require-extension', rule, { - - valid: [ - { - code: REQUIRE_PACKAGE - }, { - code: REQUIRE_JS - }, { - code: REQUIRE_JSON - }, { - code: REQUIRE_EMPTY - }, { - code: REQUIRE_OBJECT - }, { - code: REQUIRE_PACKAGE, - args: [1] - }, { - code: REQUIRE_JS, - args: [1] - }, { - code: REQUIRE_JSON, - args: [1] - }, { - code: REQUIRE_EMPTY, - args: [1] - }, { - code: REQUIRE_OBJECT, - args: [1] - }, { - code: REQUIRE_JSON, - options: [{extensions: ['.js']}] - }, { - code: REQUIRE_JSX, - options: [{extensions: ['.js']}] - }, { - code: REQUIRE_PACKAGE_JS, - options: [{extensions: ['.js']}] - } - ], - - invalid: [ - { - code: REQUIRE_JSX, - errors: [{message: 'Unable to require module with extension \'.jsx\''}] - }, { - code: REQUIRE_JSX, - args: [1], - errors: [{message: 'Unable to require module with extension \'.jsx\''}] - }, { - code: REQUIRE_JS, - options: [{extensions: ['.js']}], - errors: [{message: 'Unable to require module with extension \'.js\''}] - }, { - code: REQUIRE_JS, - options: [{extensions: ['.js', '.jsx']}], - errors: [{message: 'Unable to require module with extension \'.js\''}] - }, { - code: REQUIRE_JSX, - options: [{extensions: ['.js', '.jsx']}], - errors: [{message: 'Unable to require module with extension \'.jsx\''}] - } - ] - -});