fix(linter/consistent-test-it): avoid adjacent describe leakage#22796
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes consistent-test-it (Jest/Vitest) treating a completed sibling describe block as still active when linting subsequent top-level test calls. The previous implementation tracked describe nesting via a FxHashMap<ScopeId, i32> that was only ever incremented, so once any describe was visited every later test was considered "within describe". The fix replaces that with a Vec<Span> stack and pops entries whose span no longer contains the current node, so the within-describe option only applies while the test is actually inside a describe.
Changes:
- Replace
FxHashMap<ScopeId, i32>describe counter with aVec<Span>stack popped viaSpan::contains_inclusive. - Drop now-unused
ScopeId/FxHashMapimports. - Add Jest and Vitest passing-test regression cases for sibling
describefollowed by top-leveltest.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| crates/oxc_linter/src/rules/shared/jest_vitest/consistent_test_it.rs | Switch describe tracking to a span stack so describes are popped when traversal exits their span. |
| crates/oxc_linter/src/rules/jest/consistent_test_it.rs | Add passing-test case for sibling describe + top-level test under withinDescribe: "it". |
| crates/oxc_linter/src/rules/vitest/consistent_test_it.rs | Same regression coverage for the Vitest variant. |
Contributor
Author
Merge activity
|
`consistent-test-it` was treating any earlier `describe` call as if it still applied to later sibling tests, so a top-level `test` after a completed `describe` block could be reported as needing `it`. This tracks active `describe` calls by source span instead, so the within-describe option is only applied while the current test call is actually inside that describe. Added Jest and Vitest regression coverage for the sibling `describe` case. fixes #22633 closes #22632
dcdf546 to
33ec6b4
Compare
camc314
pushed a commit
that referenced
this pull request
Jun 1, 2026
# Oxlint ### 🚀 Features - e4b1f46 linter/typescript: Implement `method-signature-style` rule (#22679) (Mikhail Baev) - bc462ca linter/vue: Implement no-reserved-component-names rule (#22741) (bab) - ef9e751 linter/vue: Implement component-definition-name-casing rule (#22818) (bab) - d67f51a linter/vue: Implement require-prop-type-constructor rule (#22708) (bab) - 1444f82 linter/promise/spec-only: Add `Promise.try` to `Promise` static methods (#22812) (Ben Saufley) - 8422e8b linter/jsdoc: Implement `require-yields-description` rule (#22805) (Mikhail Baev) - fe93f97 linter/eslint: Implement `prefer-named-capture-group` rule (#22759) (Sebastian Poxhofer) - 1a7798b linter: Add suggestion for `unicorn/no-new-array` (#22682) (Sysix) ### 🐛 Bug Fixes - 760a9f9 linter: Report errors when writing to the filesystem (#22881) (camc314) - e5a2748 linter: Avoid no-unreachable false positive after conditional loop (#22869) (camc314) - 39d92d6 linter/arrow-body-style: Preserve comments within function (#22854) (Sysix) - 3d13e29 parser: Reject `declare` in an already-ambient context (TS1038) (#22850) (Boshen) - 5152854 parser: Reject statements in ambient contexts (TS1036) (#22849) (Boshen) - 2eafea6 parser: Reject function implementations in ambient contexts (TS1183) (#22845) (Boshen) - c645615 parser: Reject incompatible class member modifiers (#22843) (Boshen) - 4a1ca4a linter/export: Detect duplicate explicit exports (#22798) (camc314) - 0a9a735 linter/no-loop-func: Allow safe let closures (#22811) (camc314) - 1599f11 linter: Align lsp extends default plugins (#22788) (camc314) - db32ec9 linter/no-accumulating-spread: Use loop as primary span (#22800) (camc314) - 33ec6b4 linter/consistent-test-it: Avoid adjacent describe leakage (#22796) (camc314) - 2606069 linter/no-array-sort: Unwrap parenthesized sort args (#22794) (camc314) - 9f2f709 linter/no-array-sort: Skip non compare fn sort arguments (#22752) (Gaurav Dubey) - 27268a0 linter/no-else-return: Preserve statement boundary in fixer (#22687) (camc314) - d9cb6d8 linter/no-empty-function: Allow functions callbacks with `allow: functions` (#22764) (camc314) - a40a314 linter/no-shadow-restricted-names: Ignore enum members (#22762) (camc314) - 82366d9 linter/no-cond-assign: Align ternary handling (#22761) (camc314) ### 📚 Documentation - 5e113ba linter: Add license notices for ported ESLint plugins (#22768) (Boshen) # Oxfmt ### 🚀 Features - d75cbbf oxfmt: Format `parser:json` files by `oxc_formatter_json` (#22709) (leaysgur) - 49db054 formatter_json: Implement `oxc_formatter_json` (json variant only) (#22641) (leaysgur) - 9c71f2e ast, codegen, formatter: Add `WithClauseKeyword::as_str` helper and use it (#22791) (camc314) ### 🐛 Bug Fixes - d3cdd62 oxfmt: Skip formatting for whitespace-only file (#22780) (leaysgur) - 23f0cc8 formatter: Don't move comments inside variable declaration in for in loop (#22776) (leaysgur) - f200c40 formatter: Don't move comments inside variable declaration in for of loop (#22773) (Leonabcd123) ### 📚 Documentation - 845f393 oxfmt,formatter,formatter_json,formatter_core: Add/update AGENTS.md (#22873) (leaysgur)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
consistent-test-itwas treating any earlierdescribecall as if it still applied to later sibling tests, so a top-leveltestafter a completeddescribeblock could be reported as needingit.This tracks active
describecalls by source span instead, so the within-describe option is only applied while the current test call is actually inside that describe. Added Jest and Vitest regression coverage for the siblingdescribecase.fixes #22633
closes #22632