Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
feat: Support arbitrary module namespace names in no-useless-rename (#…
…15493)

* feat: Support arbitrary module namespace names in no-useless-rename

Refs #15465

* remove extra blank line
  • Loading branch information
mdjermanovic committed Jan 10, 2022
1 parent ba6317b commit 968a02a
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 4 deletions.
6 changes: 6 additions & 0 deletions docs/rules/no-useless-rename.md
Expand Up @@ -52,8 +52,11 @@ Examples of **incorrect** code for this rule by default:
/*eslint no-useless-rename: "error"*/

import { foo as foo } from "bar";
import { "foo" as foo } from "bar";
export { foo as foo };
export { foo as "foo" };
export { foo as foo } from "bar";
export { "foo" as "foo" } from "bar";
let { foo: foo } = bar;
let { 'foo': foo } = bar;
function foo({ bar: bar }) {}
Expand All @@ -68,10 +71,13 @@ Examples of **correct** code for this rule by default:
import * as foo from "foo";
import { foo } from "bar";
import { foo as bar } from "baz";
import { "foo" as bar } from "baz";

export { foo };
export { foo as bar };
export { foo as "bar" };
export { foo as bar } from "foo";
export { "foo" as "bar" } from "foo";

let { foo } = bar;
let { foo: bar } = baz;
Expand Down
12 changes: 8 additions & 4 deletions lib/rules/no-useless-rename.js
Expand Up @@ -132,8 +132,10 @@ module.exports = {
return;
}

if (node.imported.name === node.local.name &&
node.imported.range[0] !== node.local.range[0]) {
if (
node.imported.range[0] !== node.local.range[0] &&
astUtils.getModuleExportName(node.imported) === node.local.name
) {
reportError(node, node.imported, "Import");
}
}
Expand All @@ -148,8 +150,10 @@ module.exports = {
return;
}

if (node.local.name === node.exported.name &&
node.local.range[0] !== node.exported.range[0]) {
if (
node.local.range[0] !== node.exported.range[0] &&
astUtils.getModuleExportName(node.local) === astUtils.getModuleExportName(node.exported)
) {
reportError(node, node.local, "Export");
}

Expand Down
74 changes: 74 additions & 0 deletions tests/lib/rules/no-useless-rename.js
Expand Up @@ -47,11 +47,43 @@ ruleTester.run("no-useless-rename", rule, {
"import {foo} from 'foo';",
"import {foo as bar} from 'foo';",
"import {foo as bar, baz as qux} from 'foo';",
{
code: "import {'foo' as bar} from 'baz';",
parserOptions: { ecmaVersion: 2022 }
},
"export {foo} from 'foo';",
"var foo = 0;export {foo as bar};",
"var foo = 0; var baz = 0; export {foo as bar, baz as qux};",
"export {foo as bar} from 'foo';",
"export {foo as bar, baz as qux} from 'foo';",
{
code: "var foo = 0; export {foo as 'bar'};",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "export {foo as 'bar'} from 'baz';",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "export {'foo' as bar} from 'baz';",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "export {'foo' as 'bar'} from 'baz';",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "export {'' as ' '} from 'baz';",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "export {' ' as ''} from 'baz';",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "export {'foo'} from 'bar';",
parserOptions: { ecmaVersion: 2022 }
},
{
code: "const {...stuff} = myObject;",
parserOptions: { ecmaVersion: 2018 }
Expand Down Expand Up @@ -380,6 +412,12 @@ ruleTester.run("no-useless-rename", rule, {
output: "import {foo} from 'foo';",
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Import", name: "foo" } }]
},
{
code: "import {'foo' as foo} from 'foo';",
output: "import {foo} from 'foo';",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Import", name: "foo" } }]
},
{
code: "import {\\u0061 as a} from 'foo';",
output: "import {a} from 'foo';",
Expand Down Expand Up @@ -418,6 +456,42 @@ ruleTester.run("no-useless-rename", rule, {
output: "var foo = 0; export {foo};",
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }]
},
{
code: "var foo = 0; export {foo as 'foo'};",
output: "var foo = 0; export {foo};",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }]
},
{
code: "export {foo as 'foo'} from 'bar';",
output: "export {foo} from 'bar';",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }]
},
{
code: "export {'foo' as foo} from 'bar';",
output: "export {'foo'} from 'bar';",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }]
},
{
code: "export {'foo' as 'foo'} from 'bar';",
output: "export {'foo'} from 'bar';",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }]
},
{
code: "export {' 👍 ' as ' 👍 '} from 'bar';",
output: "export {' 👍 '} from 'bar';",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: " 👍 " } }]
},
{
code: "export {'' as ''} from 'bar';",
output: "export {''} from 'bar';",
parserOptions: { ecmaVersion: 2022 },
errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "" } }]
},
{
code: "var a = 0; export {a as \\u0061};",
output: "var a = 0; export {a};",
Expand Down

0 comments on commit 968a02a

Please sign in to comment.