Commit Graph

33 Commits

Author SHA1 Message Date
Charlie Marsh 4dcf284a04
Index source code upfront to power (row, column) lookups (#1990)
## Summary

The problem: given a (row, column) number (e.g., for a token in the AST), we need to be able to map it to a precise byte index in the source code. A while ago, we moved to `ropey` for this, since it was faster in practice (mostly, I think, because it's able to defer indexing). However, at some threshold of accesses, it becomes faster to index the string in advance, as we're doing here.

## Benchmark

It looks like this is ~3.6% slower for the default rule set, but ~9.3% faster for `--select ALL`.

**I suspect there's a strategy that would be strictly faster in both cases**, based on deferring even more computation (right now, we lazily compute these offsets, but we do it for the entire file at once, even if we only need some slice at the top), or caching the `ropey` lookups in some way.

Before:

![main](https://user-images.githubusercontent.com/1309177/213883581-8f73c61d-2979-4171-88a6-a88d7ff07e40.png)

After:

![48 all](https://user-images.githubusercontent.com/1309177/213883586-3e049680-9ef9-49e2-8f04-fd6ff402eba7.png)

## Alternatives

I tried tweaking the `Vec::with_capacity` hints, and even trying `Vec::with_capacity(str_indices::lines_crlf::count_breaks(contents))` to do a quick scan of the number of lines, but that turned out to be slower.
2023-01-21 17:56:11 -05:00
Colin Delahunty 1730f2a603
[pyupgrade] Automatically rewrite format-strings to f-strings (#1905) 2023-01-16 23:06:39 -05:00
Charlie Marsh f2c9f94f73
Avoid some false positives for ends-in-period checks (#1521) 2022-12-31 18:38:22 -05:00
Colin Delahunty 4ad8db3d61
Pyupgrade: Turn errors into OSError (#1434) 2022-12-31 16:36:05 -05:00
Charlie Marsh a7dc491ff1 Fix clippy 2022-12-30 12:34:43 -05:00
Charlie Marsh cdc8f8c91a
Remove support for `ur` prefixes (#1481) 2022-12-30 11:21:05 -05:00
Charlie Marsh 305326f7d7
Remove some string clones from docstring helpers (#1172) 2022-12-09 22:30:34 -05:00
Charlie Marsh 69866f5461
Extract docstring exactly once (#1171) 2022-12-09 22:21:16 -05:00
Charlie Marsh 197645d90d
Always use raw docstrings for pydocstyle rules (#1167) 2022-12-09 17:31:04 -05:00
Jeong YunWon 523cf62eda
Style fixes (#1049) 2022-12-05 09:57:48 -05:00
Charlie Marsh 965918744b
Replace FNV with rustc-hash (#837) 2022-11-20 15:38:31 -05:00
Harutaka Kawamura 13e8ed0a0a
Implement autofix for E731 (#814) 2022-11-19 19:51:41 -05:00
Charlie Marsh 71f727c380
Use FNV hasher in more places (#732) 2022-11-13 23:44:16 -05:00
Charlie Marsh 3cc74c0564
Implement import sorting (#633) 2022-11-10 19:05:56 -05:00
Charlie Marsh 2be632f3cc
Use a Rope to power fixer (#584) 2022-11-04 12:04:14 -04:00
Charlie Marsh 2415d73260
Remove RustPython fork (#523) 2022-10-30 18:04:05 -04:00
Charlie Marsh db59d5b558
Use a single SourceCodeLocator everywhere (#510) 2022-10-29 18:23:24 -04:00
Charlie Marsh 4beea0484a
Use lazy initialization for SourceCodeLocator (#472) 2022-10-26 11:27:48 -04:00
Charlie Marsh 36fe8b76d4
Enable autofix for over- and under-indented docstrings (#451) 2022-10-17 21:43:38 -04:00
Charlie Marsh 118a9feec8
Split checks and plugins into source-related modules (#447) 2022-10-17 15:38:49 -04:00
Charlie Marsh edefa5219c
Update RustPython to get main versions of end_location etc. (#445) 2022-10-17 11:52:40 -04:00
Charlie Marsh 48bd766298
Implement autofixes for more docstring rules (#442) 2022-10-16 21:16:57 -04:00
Charlie Marsh 1ece3873cd
Implement autofix for newline-related docstring rules (#441) 2022-10-16 19:40:38 -04:00
Charlie Marsh 472d902486 Rename docstring_plugins.rs to plugins.rs 2022-10-16 18:39:08 -04:00
Charlie Marsh 248a6cd50b
Remove offsets hacks for docstring parsing logic (#440) 2022-10-16 13:43:30 -04:00
Charlie Marsh c59610906c Optimize imports 2022-10-14 14:42:48 -04:00
Charlie Marsh 2353a52be8 Nest if 2022-10-14 14:36:45 -04:00
Charlie Marsh 3c15c578a7
Implement D206, D207, and D208 (#429) 2022-10-14 13:26:36 -04:00
Charlie Marsh 6407fd5a33
Re-arrange some docstring modules (#428) 2022-10-14 12:34:35 -04:00
Charlie Marsh 952a0eb4e3
Implement checks for Google-style docstrings (#427) 2022-10-14 11:53:29 -04:00
Charlie Marsh 9bbfd1d3b2
Implement docstring argument tracking for NumPy-style docstrings (#425) 2022-10-14 10:18:07 -04:00
Charlie Marsh 167992ad48
Implement D407, D408, D409, D412, and D414 (#413) 2022-10-12 17:12:54 -04:00
Charlie Marsh f0dab24079
Implement D405, D406, D410, D411, and D413 (#411) 2022-10-12 16:31:14 -04:00