Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf: only compute start offset for overlong lines (#5811)
Moves the computation of the `start_offset` for overlong lines to just before the result is returned. There is a slight overhead for overlong lines (double the work for the first `limit` characters). In practice this results in a speedup on the CPython codebase. Most lines are not overlong, or are not enforced because the line ends with a URL, or does not contain whitespace. Nonetheless, the 0.3% of overlong lines are a lot compared to other violations. ### Before ![selected before](https://github.com/astral-sh/ruff/assets/9756388/d32047df-7fd2-4ae8-8333-1a3679ce000f) _Selected W505 and E501_ ![all before](https://github.com/astral-sh/ruff/assets/9756388/98495118-c474-46ff-873c-fb58a78cfe15) _All rules_ ### After ![selected after](https://github.com/astral-sh/ruff/assets/9756388/e4bd7f10-ff7e-4d52-8267-27cace8c5471) _Selected W505 and E501_ ![all after](https://github.com/astral-sh/ruff/assets/9756388/573bdbe2-c64f-4f22-9659-c68726ff52c0) _All rules_ CPython line statistics: - Number of Python lines: 867.696 - Number of overlong lines: 2.963 (0.3%) <details> Benchmark selected: ```shell cargo build --release && hyperfine --warmup 10 --min-runs 50 \ "./target/release/ruff ./crates/ruff/resources/test/cpython/ --no-cache -e --select W505,E501" ``` Benchmark all: ```shell cargo build --release && hyperfine --warmup 10 --min-runs 50 \ "./target/release/ruff ./crates/ruff/resources/test/cpython/ --no-cache -e --select ALL" ``` Overlong lines in CPython ```shell cargo run -p ruff_cli -- check crates/ruff/resources/test/cpython/Lib --no-cache --select=E501,W505 --statistics ``` Total Python lines: ```shell find crates/ruff/resources/test/cpython/ -name '*.py' | xargs wc -l ``` </details> (Performance tested on Mac M1)
- Loading branch information