208 lines
8.2 KiB
JavaScript
208 lines
8.2 KiB
JavaScript
module.exports = {
|
|
env: {
|
|
es6: true
|
|
},
|
|
parserOptions: {
|
|
ecmaVersion: 6,
|
|
sourceType: 'module'
|
|
},
|
|
plugins: [
|
|
'import'
|
|
],
|
|
|
|
settings: {
|
|
'import/resolver': {
|
|
node: {
|
|
extensions: ['.js', '.json']
|
|
}
|
|
},
|
|
'import/extensions': [
|
|
'.js',
|
|
'.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': 'off',
|
|
|
|
// 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
|
|
'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 denotes that it is a test
|
|
'**/jest.config.js', // jest 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
|
|
],
|
|
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', 'absolute-first'],
|
|
|
|
// 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', 'always', {
|
|
js: 'never',
|
|
jsx: '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': ['off', {
|
|
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
|
|
'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,
|
|
}],
|
|
},
|
|
};
|