diff --git a/src/rules/extensions.js b/src/rules/extensions.js index 0fe605adcb..2c3b564086 100644 --- a/src/rules/extensions.js +++ b/src/rules/extensions.js @@ -132,10 +132,12 @@ module.exports = { // bail if the declaration doesn't have a source, e.g. "export { foo };" if (!source) return - const importPath = source.value + const importPathWithQueryString = source.value // don't enforce anything on builtins - if (isBuiltIn(importPath, context.settings)) return + if (isBuiltIn(importPathWithQueryString, context.settings)) return + + const importPath = importPathWithQueryString.replace(/\?(.*)$/, '') const resolvedPath = resolve(importPath, context) @@ -154,14 +156,14 @@ module.exports = { context.report({ node: source, message: - `Missing file extension ${extension ? `"${extension}" ` : ''}for "${importPath}"`, + `Missing file extension ${extension ? `"${extension}" ` : ''}for "${source.value}"`, }) } } else if (extension) { if (isUseOfExtensionForbidden(extension) && isResolvableWithoutExtension(importPath)) { context.report({ node: source, - message: `Unexpected use of file extension "${extension}" for "${importPath}"`, + message: `Unexpected use of file extension "${extension}" for "${source.value}"`, }) } } diff --git a/tests/src/rules/extensions.js b/tests/src/rules/extensions.js index a1629335c6..164f05f42a 100644 --- a/tests/src/rules/extensions.js +++ b/tests/src/rules/extensions.js @@ -116,6 +116,16 @@ ruleTester.run('extensions', rule, { ].join('\n'), options: [ 'never' ], }), + + // Query strings. + test({ + code: 'import bare from "./foo?a=True.ext"', + options: [ 'never' ], + }), + test({ + code: 'import bare from "./foo.js?a=True"', + options: [ 'always' ], + }), ], invalid: [ @@ -381,5 +391,29 @@ ruleTester.run('extensions', rule, { }, ], }), + + // Query strings. + test({ + code: 'import withExtension from "./foo.js?a=True"', + options: [ 'never' ], + errors: [ + { + message: 'Unexpected use of file extension "js" for "./foo.js?a=True"', + line: 1, + column: 27, + }, + ], + }), + test({ + code: 'import withoutExtension from "./foo?a=True.ext"', + options: [ 'always' ], + errors: [ + { + message: 'Missing file extension for "./foo?a=True.ext"', + line: 1, + column: 30, + }, + ], + }), ], })