mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-04 10:49:50 +00:00

## Summary This is a follow-up to #7469 that attempts to achieve similar gains, but without introducing malachite. Instead, this PR removes the `BigInt` type altogether, instead opting for a simple enum that allows us to store small integers directly and only allocate for values greater than `i64`: ```rust /// A Python integer literal. Represents both small (fits in an `i64`) and large integers. #[derive(Clone, PartialEq, Eq, Hash)] pub struct Int(Number); #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Number { /// A "small" number that can be represented as an `i64`. Small(i64), /// A "large" number that cannot be represented as an `i64`. Big(Box<str>), } impl std::fmt::Display for Number { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Number::Small(value) => write!(f, "{value}"), Number::Big(value) => write!(f, "{value}"), } } } ``` We typically don't care about numbers greater than `isize` -- our only uses are comparisons against small constants (like `1`, `2`, `3`, etc.), so there's no real loss of information, except in one or two rules where we're now a little more conservative (with the worst-case being that we don't flag, e.g., an `itertools.pairwise` that uses an extremely large value for the slice start constant). For simplicity, a few diagnostics now show a dedicated message when they see integers that are out of the supported range (e.g., `outdated-version-block`). An additional benefit here is that we get to remove a few dependencies, especially `num-bigint`. ## Test Plan `cargo test`
35 lines
1.1 KiB
TOML
35 lines
1.1 KiB
TOML
[package]
|
|
name = "ruff_python_parser"
|
|
version = "0.0.0"
|
|
publish = false
|
|
authors = ["Charlie Marsh <charlie.r.marsh@gmail.com>", "RustPython Team"]
|
|
edition = { workspace = true }
|
|
rust-version = { workspace = true }
|
|
homepage = { workspace = true }
|
|
documentation = { workspace = true }
|
|
repository = { workspace = true }
|
|
license = { workspace = true }
|
|
build = "build.rs"
|
|
|
|
[lib]
|
|
|
|
[dependencies]
|
|
ruff_python_ast = { path = "../ruff_python_ast" }
|
|
ruff_text_size = { path = "../ruff_text_size" }
|
|
|
|
anyhow = { workspace = true }
|
|
is-macro = { workspace = true }
|
|
itertools = { workspace = true }
|
|
lalrpop-util = { version = "0.20.0", default-features = false }
|
|
unicode-ident = { workspace = true }
|
|
unicode_names2 = { version = "0.6.0", git = "https://github.com/youknowone/unicode_names2.git", rev = "4ce16aa85cbcdd9cc830410f1a72ef9a235f2fde" }
|
|
rustc-hash = { workspace = true }
|
|
static_assertions = "1.1.0"
|
|
|
|
[dev-dependencies]
|
|
insta = { workspace = true }
|
|
|
|
[build-dependencies]
|
|
anyhow = { workspace = true }
|
|
lalrpop = { version = "0.20.0", default-features = false, optional = true }
|
|
tiny-keccak = { version = "2", features = ["sha3"] }
|