Skip to content
Commit 075d076b authored by Niels Thykier's avatar Niels Thykier Committed by Dimitri Papadopoulos Orfanos
Browse files

Speed up `codespell:ignore` check by skipping the regex in most cases

The codespell codebase unsurprisingly spends a vast majority of its
runtime in various regex related code such as `search` and `finditer`.

The best way to optimize runtime spend in regexes is to not do a regex
in the first place, since the regex engine has a rather steep overhead
over regular string primitives (that is at the cost of
flexibility). If the regex rarely matches and there is a very easy
static substring that can be used to rule out the match, then you can
speed up the code by using `substring in string` as a conditional to
skip the regex. This is assuming the regex is used enough for the
performance to matter.

An obvious choice here falls on the `codespell:ignore` regex, because
it has a very distinctive substring in the form of `codespell:ignore`,
which will rule out almost all lines that will not match.

With this little trick, runtime goes from ~5.4s to ~4.5s on the corpus
mentioned in #3419.
parent 200c31b3
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment