Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
perf(linter): no_shadow_restricted_names only look up name in hashm…
…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
commit b60bdf1ff7cb9f9298ce05048bbd01c336309493
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