From 66a64dfc4881cacdf54d01fb879f6bcf90e1bc9b Mon Sep 17 00:00:00 2001 From: Cameron Date: Sat, 9 Mar 2024 13:37:48 +0000 Subject: [PATCH] feat(linter) eslint: no-useless-rename (#2648) --- crates/oxc_linter/src/rules.rs | 2 + .../src/rules/eslint/no_useless_rename.rs | 395 ++++++++ .../src/snapshots/no_useless_rename.snap | 889 ++++++++++++++++++ 3 files changed, 1286 insertions(+) create mode 100644 crates/oxc_linter/src/rules/eslint/no_useless_rename.rs create mode 100644 crates/oxc_linter/src/snapshots/no_useless_rename.snap diff --git a/crates/oxc_linter/src/rules.rs b/crates/oxc_linter/src/rules.rs index d9212e397..f5b784f6b 100644 --- a/crates/oxc_linter/src/rules.rs +++ b/crates/oxc_linter/src/rules.rs @@ -98,6 +98,7 @@ mod eslint { pub mod no_unused_private_class_members; pub mod no_useless_catch; pub mod no_useless_escape; + pub mod no_useless_rename; pub mod no_var; pub mod no_void; pub mod require_yield; @@ -402,6 +403,7 @@ oxc_macros::declare_all_lint_rules! { eslint::no_unused_private_class_members, eslint::no_useless_catch, eslint::no_useless_escape, + eslint::no_useless_rename, eslint::no_var, eslint::no_void, eslint::require_yield, diff --git a/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs b/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs new file mode 100644 index 000000000..c6a610ab1 --- /dev/null +++ b/crates/oxc_linter/src/rules/eslint/no_useless_rename.rs @@ -0,0 +1,395 @@ +use oxc_ast::{ + ast::{ + AssignmentTarget, AssignmentTargetPattern, AssignmentTargetProperty, BindingPatternKind, + }, + AstKind, +}; +use oxc_diagnostics::{ + miette::{self, Diagnostic}, + thiserror::Error, +}; +use oxc_macros::declare_oxc_lint; +use oxc_span::Span; + +use crate::{context::LintContext, rule::Rule, AstNode}; +use oxc_span::GetSpan; + +#[derive(Debug, Error, Diagnostic)] +#[error("eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name")] +#[diagnostic(severity(warning), help("Either remove the renaming or rename the variable."))] +struct NoUselessRenameDiagnostic(#[label] pub Span); + +#[derive(Debug, Default, Clone)] +pub struct NoUselessRename(Box); + +#[allow(clippy::struct_field_names)] +#[derive(Debug, Default, Clone)] +pub struct NoUselessRenameConfig { + ignore_destructuring: bool, + ignore_import: bool, + ignore_export: bool, +} + +impl std::ops::Deref for NoUselessRename { + type Target = NoUselessRenameConfig; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +declare_oxc_lint!( + /// ### What it does + /// + /// Disallow renaming import, export, and destructured assignments to the same name. + /// + /// ### Why is this bad? + /// + /// It is unnecessary to rename a variable to the same name. + /// + /// ### Example + /// ```javascript + /// // Bad + /// import { foo as foo } from 'foo'; + /// const { bar: bar } = obj; + /// export { baz as baz }; + /// + /// // Good + /// import { foo } from 'foo'; + /// const { bar: renamed } = obj; + /// export { baz }; + /// ``` + NoUselessRename, + correctness +); + +impl Rule for NoUselessRename { + fn from_configuration(value: serde_json::Value) -> Self { + let obj = value.get(0); + + Self(Box::new(NoUselessRenameConfig { + ignore_destructuring: obj + .and_then(|v| v.get("ignoreDestructuring")) + .and_then(serde_json::Value::as_bool) + .unwrap_or_default(), + ignore_import: obj + .and_then(|v| v.get("ignoreImport")) + .and_then(serde_json::Value::as_bool) + .unwrap_or_default(), + ignore_export: obj + .and_then(|v| v.get("ignoreExport")) + .and_then(serde_json::Value::as_bool) + .unwrap_or_default(), + })) + } + + fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { + match node.kind() { + AstKind::ObjectPattern(object_pattern) => { + if self.ignore_destructuring { + return; + } + + for property in &object_pattern.properties { + if property.shorthand || property.computed { + continue; + } + + let Some(key) = property.key.static_name() else { continue }; + + let renamed_key = match &property.value.kind { + BindingPatternKind::AssignmentPattern(assignment_pattern) => { + match &assignment_pattern.left.kind { + BindingPatternKind::BindingIdentifier(binding_ident) => { + &binding_ident.name + } + _ => continue, + } + } + + BindingPatternKind::BindingIdentifier(binding_ident) => &binding_ident.name, + _ => continue, + }; + + if key == renamed_key { + ctx.diagnostic(NoUselessRenameDiagnostic(property.span)); + } + } + } + AstKind::AssignmentTarget(AssignmentTarget::AssignmentTargetPattern( + AssignmentTargetPattern::ObjectAssignmentTarget(object_assignment_target), + )) => { + if self.ignore_destructuring { + return; + } + for property in &object_assignment_target.properties { + let AssignmentTargetProperty::AssignmentTargetPropertyProperty(property) = + property + else { + continue; + }; + + let Some(key) = property.name.static_name() else { continue }; + let Some(renamed_key) = property.binding.name() else { continue }; + + if key == renamed_key { + ctx.diagnostic(NoUselessRenameDiagnostic(property.span)); + } + } + } + AstKind::ImportSpecifier(import_specifier) => { + if !self.ignore_import + && import_specifier.imported.span() != import_specifier.local.span + && import_specifier.local.name == import_specifier.imported.name() + { + ctx.diagnostic(NoUselessRenameDiagnostic(import_specifier.local.span)); + } + } + AstKind::ExportNamedDeclaration(export_named_decl) => { + if self.ignore_export { + return; + } + for specifier in &export_named_decl.specifiers { + if specifier.local.span() != specifier.exported.span() + && specifier.local.name() == specifier.exported.name() + { + ctx.diagnostic(NoUselessRenameDiagnostic(specifier.local.span())); + } + } + } + _ => {} + } + } +} + +#[test] +fn test() { + use crate::tester::Tester; + + let pass = vec![ + (r"let {foo} = obj;", None), + (r"let {foo: bar} = obj;", None), + (r"let {foo: bar, baz: qux} = obj;", None), + (r"let {foo: {bar: baz}} = obj;", None), + (r"let {foo, bar: {baz: qux}} = obj;", None), + (r"let {'foo': bar} = obj;", None), + (r"let {'foo': bar, 'baz': qux} = obj;", None), + (r"let {'foo': {'bar': baz}} = obj;", None), + (r"let {foo, 'bar': {'baz': qux}} = obj;", None), + (r"let {['foo']: bar} = obj;", None), + (r"let {['foo']: bar, ['baz']: qux} = obj;", None), + (r"let {['foo']: {['bar']: baz}} = obj;", None), + (r"let {foo, ['bar']: {['baz']: qux}} = obj;", None), + (r"let {[foo]: foo} = obj;", None), + (r"let {['foo']: foo} = obj;", None), + (r"let {[foo]: bar} = obj;", None), + (r"function func({foo}) {}", None), + (r"function func({foo: bar}) {}", None), + (r"function func({foo: bar, baz: qux}) {}", None), + (r"({foo}) => {}", None), + (r"({foo: bar}) => {}", None), + (r"({foo: bar, baz: qui}) => {}", None), + (r"import * as foo from 'foo';", None), + (r"import foo from 'foo';", None), + (r"import {foo} from 'foo';", None), + (r"import {foo as bar} from 'foo';", None), + (r"import {foo as bar, baz as qux} from 'foo';", None), + (r"import {'foo' as bar} from 'baz';", None), + (r"export {foo} from 'foo';", None), + (r"var foo = 0;export {foo as bar};", None), + (r"var foo = 0; var baz = 0; export {foo as bar, baz as qux};", None), + (r"export {foo as bar} from 'foo';", None), + (r"export {foo as bar, baz as qux} from 'foo';", None), + (r"var foo = 0; export {foo as 'bar'};", None), + (r"export {foo as 'bar'} from 'baz';", None), + (r"export {'foo' as bar} from 'baz';", None), + (r"export {'foo' as 'bar'} from 'baz';", None), + (r"export {'' as ' '} from 'baz';", None), + (r"export {' ' as ''} from 'baz';", None), + (r"export {'foo'} from 'bar';", None), + (r"const {...stuff} = myObject;", None), + (r"const {foo, ...stuff} = myObject;", None), + (r"const {foo: bar, ...stuff} = myObject;", None), + (r"let {foo: foo} = obj;", Some(serde_json::json!([{ "ignoreDestructuring": true }]))), + ( + r"let {foo: foo, bar: baz} = obj;", + Some(serde_json::json!([{ "ignoreDestructuring": true }])), + ), + ( + r"let {foo: foo, bar: bar} = obj;", + Some(serde_json::json!([{ "ignoreDestructuring": true }])), + ), + (r"import {foo as foo} from 'foo';", Some(serde_json::json!([{ "ignoreImport": true }]))), + ( + r"import {foo as foo, bar as baz} from 'foo';", + Some(serde_json::json!([{ "ignoreImport": true }])), + ), + ( + r"import {foo as foo, bar as bar} from 'foo';", + Some(serde_json::json!([{ "ignoreImport": true }])), + ), + (r"var foo = 0;export {foo as foo};", Some(serde_json::json!([{ "ignoreExport": true }]))), + ( + r"var foo = 0;var bar = 0;export {foo as foo, bar as baz};", + Some(serde_json::json!([{ "ignoreExport": true }])), + ), + ( + r"var foo = 0;var bar = 0;export {foo as foo, bar as bar};", + Some(serde_json::json!([{ "ignoreExport": true }])), + ), + (r"export {foo as foo} from 'foo';", Some(serde_json::json!([{ "ignoreExport": true }]))), + ( + r"export {foo as foo, bar as baz} from 'foo';", + Some(serde_json::json!([{ "ignoreExport": true }])), + ), + ( + r"export {foo as foo, bar as bar} from 'foo';", + Some(serde_json::json!([{ "ignoreExport": true }])), + ), + (r"const { ...foo } = bar;", None), + ]; + + let fail = vec![ + (r"let {foo: foo} = obj;", None), + (r"({foo: (foo)} = obj);", None), + (r"let {\u0061: a} = obj;", None), + (r"let {a: \u0061} = obj;", None), + (r"let {\u0061: \u0061} = obj;", None), + (r"let {a, foo: foo} = obj;", None), + (r"let {foo: foo, bar: baz} = obj;", None), + (r"let {foo: bar, baz: baz} = obj;", None), + (r"let {foo: foo, bar: bar} = obj;", None), + (r"let {foo: {bar: bar}} = obj;", None), + (r"let {foo: {bar: bar}, baz: baz} = obj;", None), + (r"let {'foo': foo} = obj;", None), + (r"let {'foo': foo, 'bar': baz} = obj;", None), + (r"let {'foo': bar, 'baz': baz} = obj;", None), + (r"let {'foo': foo, 'bar': bar} = obj;", None), + (r"let {'foo': {'bar': bar}} = obj;", None), + (r"let {'foo': {'bar': bar}, 'baz': baz} = obj;", None), + (r"let {foo: foo = 1, 'bar': bar = 1, baz: baz} = obj;", None), + (r"let {foo: {bar: bar = 1, 'baz': baz = 1}} = obj;", None), + (r"let {foo: {bar: bar = {}} = {}} = obj;", None), + (r"({foo: (foo) = a} = obj);", None), + (r"let {foo: foo = (a)} = obj;", None), + (r"let {foo: foo = (a, b)} = obj;", None), + (r"function func({foo: foo}) {}", None), + (r"function func({foo: foo, bar: baz}) {}", None), + (r"function func({foo: bar, baz: baz}) {}", None), + (r"function func({foo: foo, bar: bar}) {}", None), + (r"function func({foo: foo = 1, 'bar': bar = 1, baz: baz}) {}", None), + (r"function func({foo: {bar: bar = 1, 'baz': baz = 1}}) {}", None), + (r"function func({foo: {bar: bar = {}} = {}}) {}", None), + (r"({foo: foo}) => {}", None), + (r"({foo: foo, bar: baz}) => {}", None), + (r"({foo: bar, baz: baz}) => {}", None), + (r"({foo: foo, bar: bar}) => {}", None), + (r"({foo: foo = 1, 'bar': bar = 1, baz: baz}) => {}", None), + (r"({foo: {bar: bar = 1, 'baz': baz = 1}}) => {}", None), + (r"({foo: {bar: bar = {}} = {}}) => {}", None), + (r"const {foo: foo, ...stuff} = myObject;", None), + (r"const {foo: foo, bar: baz, ...stuff} = myObject;", None), + (r"const {foo: foo, bar: bar, ...stuff} = myObject;", None), + (r"import {foo as foo} from 'foo';", None), + (r"import {'foo' as foo} from 'foo';", None), + (r"import {\u0061 as a} from 'foo';", None), + (r"import {a as \u0061} from 'foo';", None), + (r"import {\u0061 as \u0061} from 'foo';", None), + (r"import {foo as foo, bar as baz} from 'foo';", None), + (r"import {foo as bar, baz as baz} from 'foo';", None), + (r"import {foo as foo, bar as bar} from 'foo';", None), + (r"var foo = 0; export {foo as foo};", None), + (r"var foo = 0; export {foo as 'foo'};", None), + (r"export {foo as 'foo'} from 'bar';", None), + (r"export {'foo' as foo} from 'bar';", None), + (r"export {'foo' as 'foo'} from 'bar';", None), + (r"export {' ๐Ÿ‘ ' as ' ๐Ÿ‘ '} from 'bar';", None), + (r"export {'' as ''} from 'bar';", None), + (r"var a = 0; export {a as \u0061};", None), + (r"var \u0061 = 0; export {\u0061 as a};", None), + (r"var \u0061 = 0; export {\u0061 as \u0061};", None), + (r"var foo = 0; var bar = 0; export {foo as foo, bar as baz};", None), + (r"var foo = 0; var baz = 0; export {foo as bar, baz as baz};", None), + (r"var foo = 0; var bar = 0;export {foo as foo, bar as bar};", None), + (r"export {foo as foo} from 'foo';", None), + (r"export {a as \u0061} from 'foo';", None), + (r"export {\u0061 as a} from 'foo';", None), + (r"export {\u0061 as \u0061} from 'foo';", None), + (r"export {foo as foo, bar as baz} from 'foo';", None), + (r"var foo = 0; var bar = 0; export {foo as bar, baz as baz} from 'foo';", None), + (r"export {foo as foo, bar as bar} from 'foo';", None), + (r"({/* comment */foo: foo} = {});", None), + (r"({/* comment */foo: foo = 1} = {});", None), + (r"({foo, /* comment */bar: bar} = {});", None), + (r"({foo/**/ : foo} = {});", None), + (r"({foo/**/ : foo = 1} = {});", None), + (r"({foo /**/: foo} = {});", None), + (r"({foo /**/: foo = 1} = {});", None), + ( + r"({foo:// + foo} = {});", + None, + ), + (r"({foo: /**/foo} = {});", None), + (r"({foo: (/**/foo)} = {});", None), + (r"({foo: (foo/**/)} = {});", None), + ( + r"({foo: (foo // + )} = {});", + None, + ), + (r"({foo: /**/foo = 1} = {});", None), + (r"({foo: (/**/foo) = 1} = {});", None), + (r"({foo: (foo/**/) = 1} = {});", None), + (r"({foo: foo/* comment */} = {});", None), + ( + r"({foo: foo//comment + ,bar} = {});", + None, + ), + (r"({foo: foo/* comment */ = 1} = {});", None), + ( + r"({foo: foo // comment + = 1} = {});", + None, + ), + (r"({foo: foo = /* comment */ 1} = {});", None), + ( + r"({foo: foo = // comment + 1} = {});", + None, + ), + (r"({foo: foo = (1/* comment */)} = {});", None), + (r"import {/* comment */foo as foo} from 'foo';", None), + (r"import {foo,/* comment */bar as bar} from 'foo';", None), + (r"import {foo/**/ as foo} from 'foo';", None), + (r"import {foo /**/as foo} from 'foo';", None), + ( + r"import {foo // + as foo} from 'foo';", + None, + ), + (r"import {foo as/**/foo} from 'foo';", None), + (r"import {foo as foo/* comment */} from 'foo';", None), + (r"import {foo as foo/* comment */,bar} from 'foo';", None), + (r"let foo; export {/* comment */foo as foo};", None), + (r"let foo, bar; export {foo,/* comment */bar as bar};", None), + (r"let foo; export {foo/**/as foo};", None), + (r"let foo; export {foo as/**/ foo};", None), + (r"let foo; export {foo as /**/foo};", None), + ( + r"let foo; export {foo as//comment + foo};", + None, + ), + (r"let foo; export {foo as foo/* comment*/};", None), + (r"let foo, bar; export {foo as foo/* comment*/,bar};", None), + ( + r"let foo, bar; export {foo as foo//comment + ,bar};", + None, + ), + ]; + + Tester::new(NoUselessRename::NAME, pass, fail).test_and_snapshot(); +} diff --git a/crates/oxc_linter/src/snapshots/no_useless_rename.snap b/crates/oxc_linter/src/snapshots/no_useless_rename.snap new file mode 100644 index 000000000..306547131 --- /dev/null +++ b/crates/oxc_linter/src/snapshots/no_useless_rename.snap @@ -0,0 +1,889 @@ +--- +source: crates/oxc_linter/src/tester.rs +expression: no_useless_rename +--- + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {foo: foo} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: (foo)} = obj); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {\u0061: a} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {a: \u0061} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {\u0061: \u0061} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ let {a, foo: foo} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {foo: foo, bar: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ let {foo: bar, baz: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {foo: foo, bar: bar} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ let {foo: foo, bar: bar} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:12] + 1 โ”‚ let {foo: {bar: bar}} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:23] + 1 โ”‚ let {foo: {bar: bar}, baz: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:12] + 1 โ”‚ let {foo: {bar: bar}, baz: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {'foo': foo} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {'foo': foo, 'bar': baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let {'foo': bar, 'baz': baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {'foo': foo, 'bar': bar} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let {'foo': foo, 'bar': bar} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:14] + 1 โ”‚ let {'foo': {'bar': bar}} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:27] + 1 โ”‚ let {'foo': {'bar': bar}, 'baz': baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:14] + 1 โ”‚ let {'foo': {'bar': bar}, 'baz': baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {foo: foo = 1, 'bar': bar = 1, baz: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:20] + 1 โ”‚ let {foo: foo = 1, 'bar': bar = 1, baz: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:36] + 1 โ”‚ let {foo: foo = 1, 'bar': bar = 1, baz: baz} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:12] + 1 โ”‚ let {foo: {bar: bar = 1, 'baz': baz = 1}} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:26] + 1 โ”‚ let {foo: {bar: bar = 1, 'baz': baz = 1}} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:12] + 1 โ”‚ let {foo: {bar: bar = {}} = {}} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: (foo) = a} = obj); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {foo: foo = (a)} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:6] + 1 โ”‚ let {foo: foo = (a, b)} = obj; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ function func({foo: foo}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ function func({foo: foo, bar: baz}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:26] + 1 โ”‚ function func({foo: bar, baz: baz}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ function func({foo: foo, bar: bar}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:26] + 1 โ”‚ function func({foo: foo, bar: bar}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ function func({foo: foo = 1, 'bar': bar = 1, baz: baz}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:30] + 1 โ”‚ function func({foo: foo = 1, 'bar': bar = 1, baz: baz}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:46] + 1 โ”‚ function func({foo: foo = 1, 'bar': bar = 1, baz: baz}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:22] + 1 โ”‚ function func({foo: {bar: bar = 1, 'baz': baz = 1}}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:36] + 1 โ”‚ function func({foo: {bar: bar = 1, 'baz': baz = 1}}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:22] + 1 โ”‚ function func({foo: {bar: bar = {}} = {}}) {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo, bar: baz}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:13] + 1 โ”‚ ({foo: bar, baz: baz}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo, bar: bar}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:13] + 1 โ”‚ ({foo: foo, bar: bar}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo = 1, 'bar': bar = 1, baz: baz}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:17] + 1 โ”‚ ({foo: foo = 1, 'bar': bar = 1, baz: baz}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:33] + 1 โ”‚ ({foo: foo = 1, 'bar': bar = 1, baz: baz}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ ({foo: {bar: bar = 1, 'baz': baz = 1}}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:23] + 1 โ”‚ ({foo: {bar: bar = 1, 'baz': baz = 1}}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ ({foo: {bar: bar = {}} = {}}) => {} + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:8] + 1 โ”‚ const {foo: foo, ...stuff} = myObject; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:8] + 1 โ”‚ const {foo: foo, bar: baz, ...stuff} = myObject; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:8] + 1 โ”‚ const {foo: foo, bar: bar, ...stuff} = myObject; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ const {foo: foo, bar: bar, ...stuff} = myObject; + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ import {foo as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ import {'foo' as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:19] + 1 โ”‚ import {\u0061 as a} from 'foo'; + ยท โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:14] + 1 โ”‚ import {a as \u0061} from 'foo'; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:19] + 1 โ”‚ import {\u0061 as \u0061} from 'foo'; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ import {foo as foo, bar as baz} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:28] + 1 โ”‚ import {foo as bar, baz as baz} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ import {foo as foo, bar as bar} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:28] + 1 โ”‚ import {foo as foo, bar as bar} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:22] + 1 โ”‚ var foo = 0; export {foo as foo}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:22] + 1 โ”‚ var foo = 0; export {foo as 'foo'}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {foo as 'foo'} from 'bar'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {'foo' as foo} from 'bar'; + ยท โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {'foo' as 'foo'} from 'bar'; + ยท โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {' ๐Ÿ‘ ' as ' ๐Ÿ‘ '} from 'bar'; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {'' as ''} from 'bar'; + ยท โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:20] + 1 โ”‚ var a = 0; export {a as \u0061}; + ยท โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:25] + 1 โ”‚ var \u0061 = 0; export {\u0061 as a}; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:25] + 1 โ”‚ var \u0061 = 0; export {\u0061 as \u0061}; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:35] + 1 โ”‚ var foo = 0; var bar = 0; export {foo as foo, bar as baz}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:47] + 1 โ”‚ var foo = 0; var baz = 0; export {foo as bar, baz as baz}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:34] + 1 โ”‚ var foo = 0; var bar = 0;export {foo as foo, bar as bar}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:46] + 1 โ”‚ var foo = 0; var bar = 0;export {foo as foo, bar as bar}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {foo as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {a as \u0061} from 'foo'; + ยท โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {\u0061 as a} from 'foo'; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {\u0061 as \u0061} from 'foo'; + ยท โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {foo as foo, bar as baz} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:47] + 1 โ”‚ var foo = 0; var bar = 0; export {foo as bar, baz as baz} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:9] + 1 โ”‚ export {foo as foo, bar as bar} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:21] + 1 โ”‚ export {foo as foo, bar as bar} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ ({/* comment */foo: foo} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ ({/* comment */foo: foo = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:21] + 1 โ”‚ ({foo, /* comment */bar: bar} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo/**/ : foo} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo/**/ : foo = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo /**/: foo} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo /**/: foo = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ โ•ญโ”€โ–ถ ({foo:// + 2 โ”‚ โ•ฐโ”€โ–ถ foo} = {}); + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: /**/foo} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: (/**/foo)} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: (foo/**/)} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ โ•ญโ”€โ–ถ ({foo: (foo // + 2 โ”‚ โ•ฐโ”€โ–ถ )} = {}); + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: /**/foo = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: (/**/foo) = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: (foo/**/) = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo/* comment */} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo//comment + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + 2 โ”‚ ,bar} = {}); + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo/* comment */ = 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ โ•ญโ”€โ–ถ ({foo: foo // comment + 2 โ”‚ โ•ฐโ”€โ–ถ = 1} = {}); + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo = /* comment */ 1} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ โ•ญโ”€โ–ถ ({foo: foo = // comment + 2 โ”‚ โ•ฐโ”€โ–ถ 1} = {}); + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:3] + 1 โ”‚ ({foo: foo = (1/* comment */)} = {}); + ยท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:29] + 1 โ”‚ import {/* comment */foo as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:33] + 1 โ”‚ import {foo,/* comment */bar as bar} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:20] + 1 โ”‚ import {foo/**/ as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:20] + 1 โ”‚ import {foo /**/as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:2:7] + 1 โ”‚ import {foo // + 2 โ”‚ as foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:19] + 1 โ”‚ import {foo as/**/foo} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ import {foo as foo/* comment */} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:16] + 1 โ”‚ import {foo as foo/* comment */,bar} from 'foo'; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:31] + 1 โ”‚ let foo; export {/* comment */foo as foo}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:40] + 1 โ”‚ let foo, bar; export {foo,/* comment */bar as bar}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let foo; export {foo/**/as foo}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let foo; export {foo as/**/ foo}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let foo; export {foo as /**/foo}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let foo; export {foo as//comment + ยท โ”€โ”€โ”€ + 2 โ”‚ foo}; + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:18] + 1 โ”‚ let foo; export {foo as foo/* comment*/}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:23] + 1 โ”‚ let foo, bar; export {foo as foo/* comment*/,bar}; + ยท โ”€โ”€โ”€ + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable. + + โš  eslint(no-useless-rename): Disallow renaming import, export, and destructured assignments to the same name + โ•ญโ”€[no_useless_rename.tsx:1:23] + 1 โ”‚ let foo, bar; export {foo as foo//comment + ยท โ”€โ”€โ”€ + 2 โ”‚ ,bar}; + โ•ฐโ”€โ”€โ”€โ”€ + help: Either remove the renaming or rename the variable.