Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf(linter): no_shadow_restricted_names only look up name in hashmap once #4472

Conversation

overlookmotel
Copy link
Contributor

@overlookmotel overlookmotel commented Jul 25, 2024

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, do the hashmap lookup first, as the vast majority of symbols will not be restricted names, so function can exit ASAP in that common case without also doing string comparison to undefined.

Copy link

graphite-app bot commented Jul 25, 2024

Your org has enabled the Graphite merge queue for merging into main

Add the label “merge” to the PR and Graphite will automatically add it to the merge queue when it’s ready to merge. Or use the label “hotfix” to add to the merge queue as a hot fix.

You must have a Graphite account and log in to Graphite in order to use the merge queue. Sign up using this link.

@overlookmotel overlookmotel force-pushed the 07-25-perf_linter_no_shadow_restricted_names_only_look_up_name_in_hashmap_once branch from a6cbaea to f08b812 Compare July 25, 2024 20:52
@overlookmotel overlookmotel marked this pull request as ready for review July 25, 2024 20:54
Copy link

codspeed-hq bot commented Jul 25, 2024

CodSpeed Performance Report

Merging #4472 will create unknown performance changes

Comparing 07-25-perf_linter_no_shadow_restricted_names_only_look_up_name_in_hashmap_once (b60bdf1) with main (81384f5)

Summary

🆕 32 new benchmarks

Benchmarks breakdown

Benchmark main 07-25-perf_linter_no_shadow_restricted_names_only_look_up_name_in_hashmap_once Change
🆕 codegen[checker.ts] N/A 18.4 ms N/A
🆕 codegen_sourcemap[checker.ts] N/A 75.1 ms N/A
🆕 isolated-declarations[vue-id.ts] N/A 378 ms N/A
🆕 lexer[RadixUIAdoptionSection.jsx] N/A 22.7 µs N/A
🆕 lexer[antd.js] N/A 20.1 ms N/A
🆕 lexer[cal.com.tsx] N/A 5 ms N/A
🆕 lexer[checker.ts] N/A 12 ms N/A
🆕 lexer[pdf.mjs] N/A 3.2 ms N/A
🆕 linter[cal.com.tsx] N/A 768.7 ms N/A
🆕 linter[checker.ts] N/A 1.3 s N/A
🆕 minifier[antd.js] N/A 281.6 ms N/A
🆕 minifier[react.development.js] N/A 3.2 ms N/A
🆕 minifier[typescript.js] N/A 511.7 ms N/A
🆕 prepass[antd.js] N/A 15.8 ms N/A
🆕 prepass[react.development.js] N/A 207.6 µs N/A
🆕 prepass[typescript.js] N/A 27.9 ms N/A
🆕 parser[RadixUIAdoptionSection.jsx] N/A 77.2 µs N/A
🆕 parser[antd.js] N/A 103.5 ms N/A
🆕 parser[cal.com.tsx] N/A 24 ms N/A
🆕 parser[checker.ts] N/A 52.4 ms N/A
... ... ... ... ...

ℹ️ Only the first 20 benchmarks are displayed. Go to the app to view all benchmarks.

Copy link

graphite-app bot commented Jul 26, 2024

Merge activity

@Boshen Boshen force-pushed the 07-25-refactor_semantic_methods_take_span_as_param_not_span_ branch from 6b39374 to ccb1835 Compare July 26, 2024 00:20
Boshen pushed a commit that referenced this pull request Jul 26, 2024
…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.
@Boshen Boshen force-pushed the 07-25-perf_linter_no_shadow_restricted_names_only_look_up_name_in_hashmap_once branch from f08b812 to f6ea0b1 Compare July 26, 2024 00:21
…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.
@overlookmotel overlookmotel force-pushed the 07-25-perf_linter_no_shadow_restricted_names_only_look_up_name_in_hashmap_once branch from f6ea0b1 to b60bdf1 Compare July 26, 2024 00:31
@Boshen Boshen changed the base branch from 07-25-refactor_semantic_methods_take_span_as_param_not_span_ to main July 26, 2024 00:40
@graphite-app graphite-app bot merged commit b60bdf1 into main Jul 26, 2024
23 checks passed
@graphite-app graphite-app bot deleted the 07-25-perf_linter_no_shadow_restricted_names_only_look_up_name_in_hashmap_once branch July 26, 2024 00:53
@oxc-bot oxc-bot mentioned this pull request Aug 5, 2024
Boshen added a commit that referenced this pull request Aug 5, 2024
## [0.7.0] - 2024-08-05

- 85a7cea semantic: [**BREAKING**] Remove name from `reference` (#4329)
(Dunqing)

### Features

- aaee07e ast: Add `AstKind::AssignmentTargetPattern`,
`AstKind::ArrayAssignmentTarget` and `AstKind::ObjectAssignmentTarget`
(#4456) (Dunqing)
- 9df7b56 jsx-a11y/no-autofocus: Implement fixer support (#4171) (Jelle
van der Waa)
- b87bf70 linter: Add fix capabilties to existing lint rules (#4560)
(DonIsaac)
- ddd8b27 linter: Support conditional fix capabilities (#4559)
(DonIsaac)
- b952942 linter: Add eslint/no-unused-vars (⭐ attempt 3.2) (#4445)
(DonIsaac)
- 6543958 linter: Add auto-fix metadata to RuleMeta (#4557) (Don Isaac)
- 85e8418 linter: Add react/jsx-curly-brace-presence (#3949) (Don Isaac)
- 4c4da56 linter: Add typescript-eslint/prefer-keyword-namespce (#4438)
(Aza Walker)
- d8c2a83 linter: Eslint-plugin-vitest/no-import-node-test (#4440)
(cinchen)
- e3b0c40 linter: Eslint-plugin-vitest/no-identical-title (#4422)
(cinchen)
- c936782 linter: Eslint-plugin-vitest/no-conditional-expect (#4425)
(cinchen)
- 27fdd69 linter: Eslint-plugin-vitest/no-commented-out-tests (#4424)
(cinchen)
- 51f5025 linter: Add fixer for unicorn/prefer-string-starts-ends-with
(#4378) (DonIsaac)
- 3c0c709 linter: Add typescript-eslint/no-extraneous-class (#4357)
(Jaden Rodriguez)
- 7afa1f0 linter: Support suggestions and dangerous fixes (#4223)
(DonIsaac)
- acc5729 linter: Eslint-plugin-vitest/expect-expect (#4299) (cinchen)
- 2213f93 linter: Eslint-plugin-vitest/no-alias-methods (#4301)
(cinchen)
- c296bc3 linter/eslint: Implement func-names (#4618) (Alexander S.)
- e116ae0 linter/eslint: Implement fixer for prefer-numeric-literals
(#4591) (Jelle van der Waa)
- eaf834f linter/eslint: Implement prefer-numeric-literals (#4109)
(Jelle van der Waa)
- db2fd70 linter/eslint-plugin-promise: Implement
no-webpack-loader-syntax (#4331) (Jelle van der Waa)
- 5f1e070 linter/eslint-plugin-unicorn: Add fixer for prefer-code-point
(#4353) (Jelle van der Waa)
- ed49e16 linter/eslint-plugin-unicorn: Implement fixer for
prefer-dom-node-append (#4306) (Jelle van der Waa)
- e2b15ac linter/react: Implement react-jsx-boolean-value (#4613) (Jelle
van der Waa)
- 68efcd4 linter/react-perf: Handle new objects and arrays in prop
assignment patterns (#4396) (DonIsaac)

### Bug Fixes

- 368112c ast: Remove `#[visit(ignore)]` from
`ExportDefaultDeclarationKind`'s `TSInterfaceDeclaration` (#4497)
(Dunqing)
- d384f60 ci: Remove unused(?) .html file (#4545) (Yuji Sugiura)
- 06aec77 linter: Invalid binary expression with overflow (#4647)
(DonIsaac)
- b2da22b linter: Invalid tags in rule docs (#4646) (DonIsaac)
- 94440ad linter: Panic on invalid lang in `a11y/lang`. (#4630) (rzvxa)
- e0b03f8 linter: Improve the boundary for eslint/for-direction (#4590)
(heygsc)
- 70b8cfa linter: Missing return in no-obj-calls recursion (#4594)
(DonIsaac)
- fe1356d linter: Change no-unused-vars to nursery (#4588) (DonIsaac)
- 72337b1 linter: Change typescript-eslint/no-namespace to restriction
(#4539) (Don Isaac)
- 732f4e2 linter: Fix `oxlint` allocator cfg (#4527) (overlookmotel)
- 289dc39 linter: Overflow in no-obj-calls (#4397) (DonIsaac)
- a664715 linter/eslint: Fix invalid regexp in no_regex_spaces test
(#4605) (Yuji Sugiura)
- 74fa75a linter/eslint: Drop quotes around max-params lint warning
(#4608) (Jelle van der Waa)
- 9fcd9ae linter/eslint: Fix invalid regexp in no_control_regex test
(#4544) (leaysgur)
- ac08de8 linter/react_perf: Allow new objects, array, fns, etc in top
scope (#4395) (DonIsaac)
- 0fba738 npm: SyntaxError caused by optional chaining in low version
node (#4650) (heygsc)
- 73d2558 oxlint: Fix oxlint failed to build due to missing feature
(Boshen)

### Performance

- 6ff200d linter: Change react rules and utils to use `Cow` and
`CompactStr` instead of `String` (#4603) (DonIsaac)
- f259df0 linter: Make img-redundant-alt only build a regex once (#4604)
(DonIsaac)
- 7585e16 linter: Remove allocations for string comparisons (#4570)
(DonIsaac)
- b60bdf1 linter: `no_shadow_restricted_names` only look up name in
hashmap once (#4472) (overlookmotel)
- 81384f5 linter: Avoid unnecessary work in `nextjs:no_duplicate_head`
rule (#4465) (overlookmotel)
- f7da22d linter: Disable lint rules by file type (#4380) (DonIsaac)
- 348c1ad semantic: Remove `span` field from `Reference` (#4464)
(overlookmotel)
- 6a9f4db semantic: Reduce storage size for symbol redeclarations
(#4463) (overlookmotel)- a207923 Replace some CompactStr usages with
Cows (#4377) (DonIsaac)

### Refactor

- 7a75e0f linter: Use diagnostic codes in lint rules (#4349) (DonIsaac)
- ccb1835 semantic: Methods take `Span` as param, not `&Span` (#4470)
(overlookmotel)
- 7cd53f3 semantic: Var hoisting (#4379) (Dunqing)
- c99b3eb syntax: Give `ScopeId` a niche (#4468) (overlookmotel)

Co-authored-by: Boshen <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-linter Area - Linter
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants