From 359b2c18233cb48f7dae9433a877e5727fab3411 Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Thu, 6 Jan 2022 13:26:41 +0100 Subject: [PATCH] feat: Support arbitrary module namespace names in the camelcase rule (#15490) Refs #15465 --- lib/rules/camelcase.js | 8 ++++++- tests/lib/rules/camelcase.js | 44 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/lib/rules/camelcase.js b/lib/rules/camelcase.js index 61dd062edea..6bb1838a72e 100644 --- a/lib/rules/camelcase.js +++ b/lib/rules/camelcase.js @@ -5,6 +5,12 @@ "use strict"; +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const astUtils = require("./utils/ast-utils"); + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -165,7 +171,7 @@ module.exports = { case "ImportSpecifier": return ( parent.local === node && - parent.imported.name === localName + astUtils.getModuleExportName(parent.imported) === localName ); default: diff --git a/tests/lib/rules/camelcase.js b/tests/lib/rules/camelcase.js index 514eb85d2ef..3a47a1b4b2d 100644 --- a/tests/lib/rules/camelcase.js +++ b/tests/lib/rules/camelcase.js @@ -164,11 +164,32 @@ ruleTester.run("camelcase", rule, { options: [{ ignoreImports: true }], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { + code: "import { snake_cased as snake_cased } from 'mod'", + options: [{ ignoreImports: true }], + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, + { + code: "import { 'snake_cased' as snake_cased } from 'mod'", + options: [{ ignoreImports: true }], + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, { code: "import { camelCased } from 'mod'", options: [{ ignoreImports: false }], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + + // this rule doesn't apply to quoted module export names, as it doesn't apply to quoted property names. + { + code: "export { a as 'snake_cased' } from 'mod'", + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, + { + code: "export * as 'snake_cased' from 'mod'", + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, + { code: "var _camelCased = aGlobalVariable", options: [{ ignoreGlobals: false }], @@ -668,6 +689,29 @@ ruleTester.run("camelcase", rule, { } ] }, + { + code: "import { 'snake_cased' as snake_cased } from 'mod'", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "snake_cased" }, + type: "Identifier" + } + ] + }, + { + code: "import { 'snake_cased' as another_snake_cased } from 'mod'", + options: [{ ignoreImports: true }], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "another_snake_cased" }, + type: "Identifier" + } + ] + }, { code: "import { camelCased, no_camelcased } from \"external-module\";", parserOptions: { ecmaVersion: 6, sourceType: "module" },