diff --git a/src/core/importType.js b/src/core/importType.js index 722ce7b063..57558cbd82 100644 --- a/src/core/importType.js +++ b/src/core/importType.js @@ -34,7 +34,7 @@ function isExternalPath(path, name, settings) { } const externalModuleRegExp = /^\w/ -function isExternalModule(name, settings, path) { +export function isExternalModule(name, settings, path) { return externalModuleRegExp.test(name) && isExternalPath(path, name, settings) } @@ -44,7 +44,7 @@ export function isExternalModuleMain(name, settings, path) { } const scopedRegExp = /^@[^/]+\/?[^/]+/ -function isScoped(name) { +export function isScoped(name) { return scopedRegExp.test(name) } diff --git a/src/rules/extensions.js b/src/rules/extensions.js index 0fe605adcb..c6077fb2c8 100644 --- a/src/rules/extensions.js +++ b/src/rules/extensions.js @@ -1,7 +1,7 @@ import path from 'path' import resolve from 'eslint-module-utils/resolve' -import { isBuiltIn, isExternalModuleMain, isScopedMain } from '../core/importType' +import { isBuiltIn, isExternalModule, isScoped } from '../core/importType' import docsUrl from '../docsUrl' const enumValues = { enum: [ 'always', 'ignorePackages', 'never' ] } @@ -110,8 +110,8 @@ module.exports = { return props.pattern[extension] || props.defaultConfig } - function isUseOfExtensionRequired(extension, isPackageMain) { - return getModifier(extension) === 'always' && (!props.ignorePackages || !isPackageMain) + function isUseOfExtensionRequired(extension, isPackage) { + return getModifier(extension) === 'always' && (!props.ignorePackages || !isPackage) } function isUseOfExtensionForbidden(extension) { @@ -144,11 +144,11 @@ module.exports = { const extension = path.extname(resolvedPath || importPath).substring(1) // determine if this is a module - const isPackageMain = isExternalModuleMain(importPath, context.settings) - || isScopedMain(importPath) + const isPackage = isExternalModule(importPath, context.settings) + || isScoped(importPath) if (!extension || !importPath.endsWith(`.${extension}`)) { - const extensionRequired = isUseOfExtensionRequired(extension, isPackageMain) + const extensionRequired = isUseOfExtensionRequired(extension, isPackage) const extensionForbidden = isUseOfExtensionForbidden(extension) if (extensionRequired && !extensionForbidden) { context.report({ diff --git a/tests/src/rules/extensions.js b/tests/src/rules/extensions.js index a1629335c6..720867c219 100644 --- a/tests/src/rules/extensions.js +++ b/tests/src/rules/extensions.js @@ -293,6 +293,7 @@ ruleTester.run('extensions', rule, { import bar from './bar.json' import Component from './Component' import baz from 'foo/baz' + import baw from '@scoped/baw/import' import express from 'express' `, options: [ 'always', {ignorePackages: true} ], @@ -301,10 +302,6 @@ ruleTester.run('extensions', rule, { message: 'Missing file extension for "./Component"', line: 4, column: 31, - }, { - message: 'Missing file extension for "foo/baz"', - line: 5, - column: 25, }, ], }), @@ -315,6 +312,7 @@ ruleTester.run('extensions', rule, { import bar from './bar.json' import Component from './Component' import baz from 'foo/baz' + import baw from '@scoped/baw/import' import express from 'express' `, options: [ 'ignorePackages' ], @@ -323,10 +321,6 @@ ruleTester.run('extensions', rule, { message: 'Missing file extension for "./Component"', line: 4, column: 31, - }, { - message: 'Missing file extension for "foo/baz"', - line: 5, - column: 25, }, ], }),