mirror of
https://github.com/astral-sh/ruff
synced 2026-01-14 18:14:37 -05:00
## Summary Use `Type::Divergent` to avoid "too many iterations" panic on an infinitely-nested tuple in an implicit instance attribute. The regression here is from checking all tuple elements to see if they contain a Divergent type. It's 5% on one project, 1% on another, and zero on the rest. I spent some time looking into eliminating this regression by tracking a flag on inference results to note if they could possibly contain any Divergent type, but this doesn't really work -- there are too many different ways a type containing a Divergent type could enter an inference result. Still thinking about whether there are other ways to reduce this. One option is if we see certain kinds of non-atomic types that are commonly expensive to check for Divergent, we could make `has_divergent_type` a Salsa query on those types. ## Test Plan Added mdtest. Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
81 lines
2.0 KiB
TOML
81 lines
2.0 KiB
TOML
[package]
|
|
name = "ruff-fuzz"
|
|
version = "0.0.0"
|
|
authors = [
|
|
"Charlie Marsh <charlie.r.marsh@gmail.com>",
|
|
"Addison Crump <research@addisoncrump.info>",
|
|
]
|
|
publish = false
|
|
edition = "2021"
|
|
|
|
[features]
|
|
default = ["libfuzzer"]
|
|
full-idempotency = []
|
|
libfuzzer = ["libfuzzer-sys/link_libfuzzer"]
|
|
|
|
[package.metadata]
|
|
cargo-fuzz = true
|
|
|
|
[dependencies]
|
|
ruff_db = { path = "../crates/ruff_db" }
|
|
ruff_linter = { path = "../crates/ruff_linter" }
|
|
ruff_python_ast = { path = "../crates/ruff_python_ast" }
|
|
ruff_python_codegen = { path = "../crates/ruff_python_codegen" }
|
|
ruff_python_parser = { path = "../crates/ruff_python_parser" }
|
|
ruff_source_file = { path = "../crates/ruff_source_file" }
|
|
ruff_python_formatter = { path = "../crates/ruff_python_formatter" }
|
|
ruff_text_size = { path = "../crates/ruff_text_size" }
|
|
|
|
ty_python_semantic = { path = "../crates/ty_python_semantic" }
|
|
ty_vendored = { path = "../crates/ty_vendored" }
|
|
|
|
libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer", default-features = false }
|
|
salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "3713cd7eb30821c0c086591832dd6f59f2af7fe7", default-features = false, features = [
|
|
"compact_str",
|
|
"macros",
|
|
"salsa_unstable",
|
|
"inventory",
|
|
] }
|
|
similar = { version = "2.5.0" }
|
|
tracing = { version = "0.1.40" }
|
|
|
|
# Prevent this from interfering with workspaces
|
|
[workspace]
|
|
members = ["."]
|
|
|
|
[[bin]]
|
|
name = "ty_check_invalid_syntax"
|
|
path = "fuzz_targets/ty_check_invalid_syntax.rs"
|
|
|
|
[[bin]]
|
|
name = "ruff_parse_simple"
|
|
path = "fuzz_targets/ruff_parse_simple.rs"
|
|
|
|
[[bin]]
|
|
name = "ruff_fix_validity"
|
|
path = "fuzz_targets/ruff_fix_validity.rs"
|
|
|
|
[[bin]]
|
|
name = "ruff_formatter_validity"
|
|
path = "fuzz_targets/ruff_formatter_validity.rs"
|
|
|
|
[[bin]]
|
|
name = "ruff_parse_idempotency"
|
|
path = "fuzz_targets/ruff_parse_idempotency.rs"
|
|
|
|
[[bin]]
|
|
name = "ruff_formatter_idempotency"
|
|
path = "fuzz_targets/ruff_formatter_idempotency.rs"
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
debug = true
|
|
|
|
[profile.dev]
|
|
opt-level = 3
|
|
debug = true
|
|
|
|
[profile.test]
|
|
opt-level = 3
|
|
debug = true
|