oxc-project
oxc
BlogDocsChangelog

fix(linter): fix flaky import/no_cycle test

#14328Merged
Comparing
fix-no-cycle-flaky
(
f1bc608
) with
main
(
588acd5
)
CodSpeed Performance Gauge
0%
Untouched
4
Skipped
33

Benchmarks

Skipped (33)

lexer[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
Skipped
19.8 µs*
lexer[cal.com.tsx]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
Skipped
5.3 ms*
lexer[binder.ts]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
Skipped
870.3 µs*
lexer[react.development.js]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
Skipped
356.7 µs*
mangler[react.development.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler
Skipped
261.7 µs*
mangler[cal.com.tsx]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler
Skipped
2.8 ms*
minifier[cal.com.tsx]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier
Skipped
35.5 ms*
mangler[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler
Skipped
12.6 µs*
minifier[react.development.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier
Skipped
2.5 ms*
mangler[binder.ts]
tasks/benchmark/benches/minifier.rs::minifier::bench_mangler
Skipped
743.1 µs*
minifier[binder.ts]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier
Skipped
4 ms*
semantic[react.development.js]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
Skipped
1.6 ms*
semantic[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
Skipped
71 µs*
semantic[binder.ts]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
Skipped
4.1 ms*
semantic[cal.com.tsx]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
Skipped
26.4 ms*
codegen[cal.com.tsx]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen
Skipped
34.1 ms*
codegen[binder.ts]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen
Skipped
4 ms*
codegen[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen
Skipped
118.8 µs*
codegen[react.development.js]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen
Skipped
1.8 ms*
formatter[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/formatter.rs::formatter::bench_formatter
Skipped
577.2 µs*
formatter[binder.ts]
tasks/benchmark/benches/formatter.rs::formatter::bench_formatter
Skipped
23.7 ms*
formatter[cal.com.tsx]
tasks/benchmark/benches/formatter.rs::formatter::bench_formatter
Skipped
211.2 ms*
formatter[react.development.js]
tasks/benchmark/benches/formatter.rs::formatter::bench_formatter
Skipped
12.1 ms*
parser[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/parser.rs::parser::bench_parser
Skipped
86.6 µs*
estree[checker.ts]
tasks/benchmark/benches/parser.rs::parser::bench_estree
Skipped
104.5 ms*
parser[react.development.js]
tasks/benchmark/benches/parser.rs::parser::bench_parser
Skipped
1.3 ms*
parser[binder.ts]
tasks/benchmark/benches/parser.rs::parser::bench_parser
Skipped
3.3 ms*
parser[cal.com.tsx]
tasks/benchmark/benches/parser.rs::parser::bench_parser
Skipped
26.6 ms*
transformer[react.development.js]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
Skipped
715.1 µs*
transformer[cal.com.tsx]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
Skipped
26.4 ms*
transformer[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
Skipped
134.3 µs*
transformer[binder.ts]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
Skipped
1.7 ms*
isolated-declarations[vue-id.ts]
tasks/benchmark/benches/transformer.rs::transformer::bench_isolated_declarations
Skipped
56.4 ms*

Passed

linter[react.development.js]
tasks/benchmark/benches/linter.rs::linter::bench_linter
CodSpeed Performance Gauge
0%
33 ms33 ms
linter[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/linter.rs::linter::bench_linter
CodSpeed Performance Gauge
0%
1.6 ms1.6 ms
linter[cal.com.tsx]
tasks/benchmark/benches/linter.rs::linter::bench_linter
CodSpeed Performance Gauge
0%
729.6 ms729.6 ms
linter[binder.ts]
tasks/benchmark/benches/linter.rs::linter::bench_linter
CodSpeed Performance Gauge
0%
88.7 ms88.7 ms

Commits

Click on a commit to change the comparison range
Base
main
588acd5
+0.03%
fix(linter): fix flaky import/no_cycle test (#14328) ## Summary Fixes the flaky `import/no_cycle` test that was failing 2/10 times on Linux CI. ## Root Cause The module graph is populated via parallel insertion (`par_drain` in `runtime.rs`), which causes non-deterministic insertion order into `FxHashMap`. Since hashmap iteration order depends on insertion order, this leads to: 1. Different iteration orders across test runs 2. Different graph traversal paths in the cycle detector 3. The `traversed` set preventing revisiting nodes means cycles can be found or missed depending on which path is explored first ## Solution Sort the hashmap entries by key before iterating in `module_graph_visitor.rs` to ensure deterministic traversal order regardless of parallel insertion timing. ## Test Plan - [x] `cargo test -p oxc_linter no_cycle` passes - [x] Code formatted with `just fmt` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
f1bc608
5 days ago
by Boshen
© 2025 CodSpeed Technology
Home Terms Privacy Docs