You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
11 KiB
262 lines
11 KiB
module.exports = { |
|
env: { |
|
es6: true |
|
}, |
|
parserOptions: { |
|
ecmaVersion: 6, |
|
sourceType: 'module' |
|
}, |
|
plugins: [ |
|
'import' |
|
], |
|
|
|
settings: { |
|
'import/resolver': { |
|
node: { |
|
extensions: ['.mjs', '.js', '.json'] |
|
} |
|
}, |
|
'import/extensions': [ |
|
'.js', |
|
'.mjs', |
|
'.jsx', |
|
], |
|
'import/core-modules': [ |
|
], |
|
'import/ignore': [ |
|
'node_modules', |
|
'\\.(coffee|scss|css|less|hbs|svg|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': ['error', { commonjs: true, caseSensitive: 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': 'error', |
|
|
|
// 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': 'off', |
|
|
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md |
|
'import/namespace': 'off', |
|
|
|
// Helpful warnings: |
|
|
|
// disallow invalid exports, e.g. multiple defaults |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md |
|
'import/export': 'error', |
|
|
|
// 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 |
|
'import/no-named-as-default': 'error', |
|
|
|
// warn on accessing default export property names that are also named exports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md |
|
'import/no-named-as-default-member': 'error', |
|
|
|
// disallow use of jsdoc-marked-deprecated imports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md |
|
'import/no-deprecated': 'off', |
|
|
|
// Forbid the use of extraneous packages |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md |
|
// paths are treated both as absolute paths, and relative to process.cwd() |
|
'import/no-extraneous-dependencies': ['error', { |
|
devDependencies: [ |
|
'test/**', // tape, common npm pattern |
|
'tests/**', // also common npm pattern |
|
'spec/**', // mocha, rspec-like pattern |
|
'**/__tests__/**', // jest pattern |
|
'**/__mocks__/**', // jest pattern |
|
'test.{js,jsx}', // repos with a single test file |
|
'test-*.{js,jsx}', // repos with multiple top-level test files |
|
'**/*{.,_}{test,spec}.{js,jsx}', // tests where the extension or filename suffix denotes that it is a test |
|
'**/jest.config.js', // jest config |
|
'**/jest.setup.js', // jest setup |
|
'**/vue.config.js', // vue-cli config |
|
'**/webpack.config.js', // webpack config |
|
'**/webpack.config.*.js', // webpack config |
|
'**/rollup.config.js', // rollup config |
|
'**/rollup.config.*.js', // rollup config |
|
'**/gulpfile.js', // gulp config |
|
'**/gulpfile.*.js', // gulp config |
|
'**/Gruntfile{,.js}', // grunt config |
|
'**/protractor.conf.js', // protractor config |
|
'**/protractor.conf.*.js', // protractor config |
|
'**/karma.conf.js' // karma config |
|
], |
|
optionalDependencies: false, |
|
}], |
|
|
|
// Forbid mutable exports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md |
|
'import/no-mutable-exports': 'error', |
|
|
|
// Module systems: |
|
|
|
// disallow require() |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md |
|
'import/no-commonjs': 'off', |
|
|
|
// disallow AMD require/define |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md |
|
'import/no-amd': 'error', |
|
|
|
// No Node.js builtin modules |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md |
|
// TODO: enable? |
|
'import/no-nodejs-modules': 'off', |
|
|
|
// Style guide: |
|
|
|
// disallow non-import statements appearing before import statements |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md |
|
'import/first': 'error', |
|
|
|
// disallow non-import statements appearing before import statements |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md |
|
// deprecated: use `import/first` |
|
'import/imports-first': 'off', |
|
|
|
// disallow duplicate imports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md |
|
'import/no-duplicates': 'error', |
|
|
|
// disallow namespace imports |
|
// TODO: enable? |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md |
|
'import/no-namespace': 'off', |
|
|
|
// Ensure consistent use of file extension within the import path |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md |
|
'import/extensions': ['error', 'ignorePackages', { |
|
js: 'never', |
|
mjs: 'never', |
|
jsx: 'never', |
|
}], |
|
|
|
// ensure absolute imports are above relative imports and that unassigned imports are ignored |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md |
|
// TODO: enforce a stricter convention in module import order? |
|
'import/order': ['error', { groups: [['builtin', 'external', 'internal']] }], |
|
|
|
// 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 |
|
'import/newline-after-import': 'error', |
|
|
|
// 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 |
|
'import/prefer-default-export': 'error', |
|
|
|
// Restrict which files can be imported in a given folder |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md |
|
'import/no-restricted-paths': 'off', |
|
|
|
// Forbid modules to have too many dependencies |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/max-dependencies.md |
|
'import/max-dependencies': ['off', { max: 10 }], |
|
|
|
// Forbid import of modules using absolute paths |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md |
|
'import/no-absolute-path': 'error', |
|
|
|
// Forbid require() calls with expressions |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md |
|
'import/no-dynamic-require': 'error', |
|
|
|
// prevent importing the submodules of other modules |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md |
|
'import/no-internal-modules': ['off', { |
|
allow: [], |
|
}], |
|
|
|
// Warn if a module could be mistakenly parsed as a script by a consumer |
|
// leveraging Unambiguous JavaScript Grammar |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/unambiguous.md |
|
// this should not be enabled until this proposal has at least been *presented* to TC39. |
|
// At the moment, it's not a thing. |
|
'import/unambiguous': 'off', |
|
|
|
// Forbid Webpack loader syntax in imports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md |
|
'import/no-webpack-loader-syntax': 'error', |
|
|
|
// Prevent unassigned imports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md |
|
// importing for side effects is perfectly acceptable, if you need side effects. |
|
'import/no-unassigned-import': 'off', |
|
|
|
// Prevent importing the default as if it were named |
|
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-default.md |
|
'import/no-named-default': 'error', |
|
|
|
// Reports if a module's default export is unnamed |
|
// https://github.com/benmosher/eslint-plugin-import/blob/d9b712ac7fd1fddc391f7b234827925c160d956f/docs/rules/no-anonymous-default-export.md |
|
'import/no-anonymous-default-export': ['off', { |
|
allowArray: false, |
|
allowArrowFunction: false, |
|
allowAnonymousClass: false, |
|
allowAnonymousFunction: false, |
|
allowLiteral: false, |
|
allowObject: false, |
|
}], |
|
|
|
// This rule enforces that all exports are declared at the bottom of the file. |
|
// https://github.com/benmosher/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md |
|
// TODO: enable? |
|
'import/exports-last': 'off', |
|
|
|
// Reports when named exports are not grouped together in a single export declaration |
|
// or when multiple assignments to CommonJS module.exports or exports object are present |
|
// in a single file. |
|
// https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/group-exports.md |
|
'import/group-exports': 'off', |
|
|
|
// forbid default exports. this is a terrible rule, do not use it. |
|
// https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md |
|
'import/no-default-export': 'off', |
|
|
|
// Prohibit named exports. this is a terrible rule, do not use it. |
|
// https://github.com/benmosher/eslint-plugin-import/blob/1ec80fa35fa1819e2d35a70e68fb6a149fb57c5e/docs/rules/no-named-export.md |
|
'import/no-named-export': 'off', |
|
|
|
// Forbid a module from importing itself |
|
// https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md |
|
'import/no-self-import': 'error', |
|
|
|
// Forbid cyclical dependencies between modules |
|
// https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md |
|
'import/no-cycle': ['error', { maxDepth: '∞' }], |
|
|
|
// Ensures that there are no useless path segments |
|
// https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md |
|
'import/no-useless-path-segments': ['error', { commonjs: true }], |
|
|
|
// dynamic imports require a leading comment with a webpackChunkName |
|
// https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md |
|
'import/dynamic-import-chunkname': ['off', { |
|
importFunctions: [], |
|
webpackChunknameFormat: '[0-9a-zA-Z-_/.]+', |
|
}], |
|
|
|
// Use this rule to prevent imports to folders in relative parent paths. |
|
// https://github.com/benmosher/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md |
|
'import/no-relative-parent-imports': 'off', |
|
|
|
// Reports modules without any exports, or with unused exports |
|
// https://github.com/benmosher/eslint-plugin-import/blob/f63dd261809de6883b13b6b5b960e6d7f42a7813/docs/rules/no-unused-modules.md |
|
// TODO: enable, semver-major |
|
'import/no-unused-modules': ['off', { |
|
ignoreExports: [], |
|
missingExports: true, |
|
unusedExports: true, |
|
}], |
|
}, |
|
};
|
|
|