From 34ccf905d65c2f0a7f946919f5d2c703f359d973 Mon Sep 17 00:00:00 2001 From: akai Date: Tue, 17 May 2016 01:10:00 +0800 Subject: [PATCH] [eslint config] [base] [breaking] migrate import's settings/rules to a separate file. --- packages/eslint-config-airbnb-base/index.js | 1 + .../eslint-config-airbnb-base/rules/es6.js | 107 +-------------- .../rules/imports.js | 124 ++++++++++++++++++ .../eslint-config-airbnb-base/rules/node.js | 17 +-- 4 files changed, 127 insertions(+), 122 deletions(-) create mode 100644 packages/eslint-config-airbnb-base/rules/imports.js diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js index eacb0ed3..a4644f15 100644 --- a/packages/eslint-config-airbnb-base/index.js +++ b/packages/eslint-config-airbnb-base/index.js @@ -2,6 +2,7 @@ module.exports = { extends: [ './legacy', './rules/es6', + './rules/imports', ].map(require.resolve), parserOptions: { ecmaVersion: 7, diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js index 216bcd82..57aa01e7 100644 --- a/packages/eslint-config-airbnb-base/rules/es6.js +++ b/packages/eslint-config-airbnb-base/rules/es6.js @@ -10,9 +10,6 @@ module.exports = { 'objectLiteralDuplicateProperties': false } }, - 'plugins': [ - 'import' - ], 'rules': { // enforces no braces where they can be omitted @@ -121,108 +118,6 @@ module.exports = { // enforce spacing around the * in yield* expressions // http://eslint.org/docs/rules/yield-star-spacing - 'yield-star-spacing': [2, 'after'], - - // disallow invalid exports, e.g. multiple defaults - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md - 'import/export': 2, - - // ensure default import coupled with default export - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it - 'import/default': 0, - - // Ensure consistent use of file extension within the import path - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md - // TODO: enable - 'import/extensions': [0, 'never'], - - // ensure named imports coupled with named exports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it - 'import/named': 0, - - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md - 'import/namespace': 0, - - // Forbid the use of extraneous packages - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md - // TODO: enable - 'import/no-extraneous-dependencies': [0, { - 'devDependencies': false, - 'optionalDependencies': false, - }], - - // ensure imports point to files/modules that can be resolved - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md - 'import/no-unresolved': [2, { 'commonjs': true }], - - // do not allow a default import name to match a named export - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md - // TODO: enable - 'import/no-named-as-default': 0, - - // disallow require() - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md - 'import/no-commonjs': 0, - - // disallow AMD require/define - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md - 'import/no-amd': 2, - - // disallow non-import statements appearing before import statements - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md - // TODO: enable? - 'import/imports-first': [0, 'absolute-first'], - - // disallow duplicate imports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md - 'import/no-duplicates': 2, - - // disallow use of jsdoc-marked-deprecated imports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md - 'import/no-deprecated': 0, - - // disallow namespace imports - // TODO: enable? - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md - 'import/no-namespace': 0, - - // warn on accessing default export property names that are also named exports - // TODO: enable? - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md - 'import/no-named-as-default-member': 0, - - // No Node.js builtin modules - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md - 'import/no-nodejs-modules': 0, - - // Enforce a convention in module import order - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md - // TODO: enable? - 'import/order': [0, { - 'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'], - 'newlines-between': 'never', - }], - - // Require modules with a single export to use a default export - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md - // TODO: enable - 'import/prefer-default-export': 0, - - // Require a newline after the last import/require in a group - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md - // TODO: enable - 'import/newline-after-import': 0, - - // Forbid mutable exports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md - 'import/no-mutable-exports': 2, - }, - - 'settings': { - 'import/resolver': { - 'node': { - 'extensions': ['.js', '.json'] - } - } + 'yield-star-spacing': [2, 'after'] } }; diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js new file mode 100644 index 00000000..1f854043 --- /dev/null +++ b/packages/eslint-config-airbnb-base/rules/imports.js @@ -0,0 +1,124 @@ +module.exports = { + 'env': { + 'es6': true + }, + 'parserOptions': { + 'ecmaVersion': 6, + 'sourceType': 'module' + }, + 'plugins': [ + 'import' + ], + + 'settings': { + 'import/resolver': { + 'node': { + 'extensions': ['.js', '.json'] + } + } + }, + + 'rules': { + // Static analysis: + + // ensure imports point to files/modules that can be resolved + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md + 'import/no-unresolved': [2, { 'commonjs': true }], + + // ensure named imports coupled with named exports + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it + 'import/named': 0, + + // ensure default import coupled with default export + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it + 'import/default': 0, + + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md + 'import/namespace': 0, + + // Helpful warnings: + + // disallow invalid exports, e.g. multiple defaults + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md + 'import/export': 2, + + // do not allow a default import name to match a named export + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md + // TODO: enable + 'import/no-named-as-default': 0, + + // warn on accessing default export property names that are also named exports + // TODO: enable? + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md + 'import/no-named-as-default-member': 0, + + // disallow use of jsdoc-marked-deprecated imports + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md + 'import/no-deprecated': 0, + + // Forbid the use of extraneous packages + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md + // TODO: enable + 'import/no-extraneous-dependencies': [0, { + 'devDependencies': false, + 'optionalDependencies': false, + }], + + // Forbid mutable exports + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md + 'import/no-mutable-exports': 2, + + // Module systems: + + // disallow require() + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md + 'import/no-commonjs': 0, + + // disallow AMD require/define + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md + 'import/no-amd': 2, + + // No Node.js builtin modules + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md + 'import/no-nodejs-modules': 0, + + // Style guide: + + // disallow non-import statements appearing before import statements + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md + // TODO: enable? + 'import/imports-first': [0, 'absolute-first'], + + // disallow duplicate imports + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md + 'import/no-duplicates': 2, + + // disallow namespace imports + // TODO: enable? + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md + 'import/no-namespace': 0, + + // Ensure consistent use of file extension within the import path + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md + // TODO: enable + 'import/extensions': [0, 'never'], + + // Enforce a convention in module import order + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md + // TODO: enable? + 'import/order': [0, { + 'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'], + 'newlines-between': 'never', + }], + + // Require a newline after the last import/require in a group + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md + // TODO: enable + 'import/newline-after-import': 0, + + // Require modules with a single export to use a default export + // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md + // TODO: enable + 'import/prefer-default-export': 0 + } +}; diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js index 69b46b29..3dcc2a1f 100644 --- a/packages/eslint-config-airbnb-base/rules/node.js +++ b/packages/eslint-config-airbnb-base/rules/node.js @@ -2,9 +2,6 @@ module.exports = { 'env': { 'node': true }, - 'plugins': [ - 'import' - ], 'rules': { // enforce return after a callback @@ -36,18 +33,6 @@ module.exports = { 'no-restricted-modules': 0, // disallow use of synchronous methods (off by default) - 'no-sync': 0, - - // ensure imports point to files/modules that can be resolved - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md - 'import/no-unresolved': [2, { 'commonjs': true }] - }, - - 'settings': { - 'import/resolver': { - 'node': { - 'extensions': ['.js', '.json'] - } - } + 'no-sync': 0 } };