Skip to content

Commit

Permalink
perf(linter): no_shadow_restricted_names only look up name in hashm…
Browse files Browse the repository at this point in the history
…ap once (#4472)

`eslint(no_shadow_restricted_names)` lint rule emits a diagnostic for every declaration of a symbol with a restricted name.

Currently for a var which has redeclarations, the var name is looked up in hash map of restricted names repeatedly for each redeclaration. This PR changes that to only do a single hashmap lookup.

Also, if the var name is `undefined`, skip looking it up in hash map, because we already know it's a restricted name.
  • Loading branch information
overlookmotel committed Jul 26, 2024
1 parent ccb1835 commit b60bdf1
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions crates/oxc_linter/src/rules/eslint/no_shadow_restricted_names.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,15 @@ declare_oxc_lint!(
correctness
);

#[inline]
fn check_and_diagnostic(s: &str, span: Span, ctx: &LintContext) {
if PRE_DEFINE_VAR.contains_key(s) {
ctx.diagnostic(no_shadow_restricted_names_diagnostic(s, span));
}
}

impl Rule for NoShadowRestrictedNames {
fn run_once(&self, ctx: &LintContext<'_>) {
ctx.symbols().iter().for_each(|symbol_id| {
let name = ctx.symbols().get_name(symbol_id);

if !PRE_DEFINE_VAR.contains_key(name) {
return;
}

if name == "undefined" {
// Allow to declare `undefined` variable but not allow to assign value to it.
let node_id = ctx.semantic().symbols().get_declaration(symbol_id);
Expand All @@ -63,9 +60,11 @@ impl Rule for NoShadowRestrictedNames {
}
}

check_and_diagnostic(name, ctx.symbols().get_span(symbol_id), ctx);
for span in ctx.symbols().get_redeclarations(symbol_id) {
check_and_diagnostic(name, *span, ctx);
let span = ctx.symbols().get_span(symbol_id);
ctx.diagnostic(no_shadow_restricted_names_diagnostic(name, span));

for &span in ctx.symbols().get_redeclarations(symbol_id) {
ctx.diagnostic(no_shadow_restricted_names_diagnostic(name, span));
}
});
}
Expand Down

0 comments on commit b60bdf1

Please sign in to comment.