Skip to content

fix(linter/consistent-test-it): avoid adjacent describe leakage#22796

Merged
graphite-app[bot] merged 1 commit into
mainfrom
codex/fix-consistent-test-it-describe
May 28, 2026
Merged

fix(linter/consistent-test-it): avoid adjacent describe leakage#22796
graphite-app[bot] merged 1 commit into
mainfrom
codex/fix-consistent-test-it-describe

Conversation

@camc314

@camc314 camc314 commented May 28, 2026

Copy link
Copy Markdown
Contributor

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

@camc314 camc314 self-assigned this May 28, 2026
@github-actions github-actions Bot added the A-linter Area - Linter label May 28, 2026
@camc314 camc314 marked this pull request as ready for review May 28, 2026 12:18
Copilot AI review requested due to automatic review settings May 28, 2026 12:18
@camc314 camc314 changed the title fix(linter): avoid consistent-test-it describe leakage fix(linter/consistent-test-it): avoid adjacent describe leakage May 28, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 a Vec<Span> stack popped via Span::contains_inclusive.
  • Drop now-unused ScopeId / FxHashMap imports.
  • Add Jest and Vitest passing-test regression cases for sibling describe followed by top-level test.

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.

@camc314 camc314 added the 0-merge Merge with Graphite Merge Queue label May 28, 2026

camc314 commented May 28, 2026

Copy link
Copy Markdown
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
@graphite-app graphite-app Bot force-pushed the codex/fix-consistent-test-it-describe branch from dcdf546 to 33ec6b4 Compare May 28, 2026 12:24
@graphite-app graphite-app Bot merged commit 33ec6b4 into main May 28, 2026
29 checks passed
@graphite-app graphite-app Bot removed the 0-merge Merge with Graphite Merge Queue label May 28, 2026
@graphite-app graphite-app Bot deleted the codex/fix-consistent-test-it-describe branch May 28, 2026 12:26
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)
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.

linter: consistent-test-it considers sibling describe as parent

2 participants