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/react-exhaustive-deps): use stack of AstTypes instead of AstKinds #8522

Conversation

overlookmotel
Copy link
Contributor

@overlookmotel overlookmotel commented Jan 15, 2025

This lint rule keeps a stack tracing the "visitation path" during Visit. Only the type of the nodes is used, not their values, so store only AstType (1 byte) rather than AstKind (16 bytes).

This should be more performant, but the main motivation is #8461. This is one of very few places in the codebase which uses enter_node and leave_node. Not storing AstKinds here clears the way to remove the unsound lifetime extension in Visit::alloc.

Copy link
Contributor Author

overlookmotel commented Jan 15, 2025


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • 0-merge - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

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

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions github-actions bot added A-linter Area - Linter C-performance Category - Solution not expected to change functional behavior, only performance labels Jan 15, 2025
@overlookmotel overlookmotel marked this pull request as ready for review January 15, 2025 23:50
Copy link

codspeed-hq bot commented Jan 15, 2025

CodSpeed Performance Report

Merging #8522 will not alter performance

Comparing 01-15-perf_linter_react-exhaustive-deps_use_stack_of_asttype_s_instead_of_astkind_s (250bbd1) with main (06ccb51)

Summary

✅ 32 untouched benchmarks

@overlookmotel overlookmotel added the 0-merge Merge with Graphite Merge Queue label Jan 16, 2025
Copy link
Contributor Author

overlookmotel commented Jan 16, 2025

Merge activity

  • Jan 15, 7:32 PM EST: The merge label '0-merge' was detected. This PR will be added to the Graphite merge queue once it meets the requirements.
  • Jan 15, 7:32 PM EST: A user added this pull request to the Graphite merge queue.
  • Jan 15, 7:39 PM EST: A user merged this pull request with the Graphite merge queue.

@overlookmotel
Copy link
Contributor Author

Thanks for reviewing!

…f `AstKind`s (#8522)

This lint rule keeps a stack tracing the "visitation path" during `Visit`. Only the type of the nodes is used, not their values, so store only `AstType` (1 byte) rather than `AstKind` (16 bytes).

This should be more performant, but the main motivation is #8461. This is one of very few places in the codebase which uses `enter_node` and `leave_node`. Not storing `AstKind`s here clears the way to remove the unsound lifetime extension in `Visit::alloc`.
@overlookmotel overlookmotel force-pushed the 01-15-feat_ast_add_astkind_ty_method branch from 6c38ea1 to a6d71f8 Compare January 16, 2025 00:32
@overlookmotel overlookmotel force-pushed the 01-15-perf_linter_react-exhaustive-deps_use_stack_of_asttype_s_instead_of_astkind_s branch from 770a05c to 250bbd1 Compare January 16, 2025 00:33
Base automatically changed from 01-15-feat_ast_add_astkind_ty_method to main January 16, 2025 00:37
@graphite-app graphite-app bot merged commit 250bbd1 into main Jan 16, 2025
26 checks passed
@graphite-app graphite-app bot deleted the 01-15-perf_linter_react-exhaustive-deps_use_stack_of_asttype_s_instead_of_astkind_s branch January 16, 2025 00:39
Boshen added a commit that referenced this pull request Jan 19, 2025
## [0.15.7] - 2025-01-19

### Features

- 01ac773 linter: Support `ignoreTypeOfTestName` for `jest/valid-title`
(#8589) (dalaoshu)
- 538b24a linter: Format the configuration documentation correctly
(#8583) (Tapan Prakash)
- 7ab14cc linter: Add more Vitest compatible Jest rules (#8445) (Anson
Heung)
- d178360 linter: Implement `eslint/prefer-promise-reject-errors`
(#8254) (tbashiyy)
- 4ac2e99 oxlint: Implement `--init` cli option (#8453) (Tapan Prakash)

### Bug Fixes

- 855c839 codegen: Shorthand assignment target identifier consider
mangled names (#8536) (Boshen)
- c15af02 linter: False positive in `eslint/no-lone-blocks` (#8587)
(dalaoshu)
- 41f2070 linter: Rule `no-restricted-imports` support missing options
(#8076) (Alexander S.)
- 869bc73 linter: Enhance `default_param_last` rule to handle optional
parameters (#8563) (Tapan Prakash)
- c6260c2 linter: Support rest params for `prefer_promise_reject_errors`
(#8468) (Yuichiro Yamashita)
- 2be1e82 linter/no-unused-vars: False positives when variable and type
have same name (#8465) (Dunqing)

### Performance

- 250bbd1 linter/react-exhaustive-deps: Use stack of `AstType`s instead
of `AstKind`s (#8522) (overlookmotel)

### Refactor

- 40f5165 linter: Improve `eslint/no-lone-blocks` (#8588) (dalaoshu)
- b4c87e2 linter: Move DiagnosticsReporters to oxlint (#8454) (Alexander
S.)
- bf00f82 linter: Move rule `prefer-each` from vitest to jest +
remapping (#8448) (Alexander S.)
- 8dd0013 linter/consistent-function-scoping: Remove `Visit::enter_node`
usage (#8538) (overlookmotel)
- 30c0689 linter/no-map-spread: Remove `Visit::enter_node` usage (#8537)
(overlookmotel)
- b5ed58e span: All methods take owned `Span` (#8297) (overlookmotel)

### Styling

- 3789d2f linter/react-exhaustive-deps: Fix indentation (#8520)
(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
0-merge Merge with Graphite Merge Queue A-linter Area - Linter C-performance Category - Solution not expected to change functional behavior, only performance
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants