Skip to content

Commit

Permalink
try not consuming the entire iterator
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrugman committed Jul 16, 2023
1 parent d692ed0 commit 779dba7
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
7 changes: 7 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,13 @@ Summary
159.43 ± 2.48 times faster than 'pycodestyle crates/ruff/resources/test/cpython'
```

To benchmark a subset of rules, e.g. `LineTooLong` and `DocLineTooLong`:

```shell
cargo build --release && hyperfine --warmup 10 \
"./target/release/ruff ./crates/ruff/resources/test/cpython/ --no-cache -e --select W505,E501"
```

You can run `poetry install` from `./scripts/benchmarks` to create a working environment for the
above. All reported benchmarks were computed using the versions specified by
`./scripts/benchmarks/pyproject.toml` on Python 3.11.
Expand Down
21 changes: 12 additions & 9 deletions crates/ruff/src/rules/pycodestyle/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,8 @@ pub(super) fn is_overlong(
task_tags: &[String],
tab_size: TabSize,
) -> Option<Overlong> {
let mut start_offset = line.start();
let mut width = LineWidth::new(tab_size);

for c in line.chars() {
if width < limit {
start_offset += c.text_len();
}
width = width.add_char(c);
}

width = width.add_str(line.as_str());
if width <= limit {
return None;
}
Expand Down Expand Up @@ -91,6 +83,17 @@ pub(super) fn is_overlong(
}
}

// Obtain the start offset of the part of te line that exceeds the limit
let mut start_offset = line.start();
let mut start_width = LineWidth::new(tab_size);
for c in line.chars() {
if start_width < limit {
start_offset += c.text_len();
start_width = start_width.add_char(c);
} else {
break;
}
}
Some(Overlong {
range: TextRange::new(start_offset, line.end()),
width: width.get(),
Expand Down

0 comments on commit 779dba7

Please sign in to comment.