Fix
#13654, improve performance of auto match for quotes...
Fix
#13654, improve performance of auto match for quotes
As pointed out in
#13654, auto matching of quotes may take a long time
if the prefix is long.
To be more precise, the longer the text before the first quote, the
slower it is.
This is all caused by the regex pattern used: `r'^([^"]+|"[^"]*")*$'`,
which I suspect is O(2^N) slow.
```python
In [1]: text = "function_with_long_nameeee('arg"
In [2]: import re
In [3]: pattern = re.compile(r"^([^']+|'[^']*')*$")
In [4]: %timeit pattern.match(text)
10.3 s ± 67.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [5]: %timeit pattern.match("1'")
312 ns ± 0.775 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops
each)
In [6]: %timeit pattern.match("12'")
462 ns ± 1.95 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops
each)
In [7]: %timeit pattern.match("123'")
766 ns ± 6.32 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops
each)
In [8]: %timeit pattern.match("1234'")
1.59 µs ± 20.9 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops
each)
```
But the pattern we want here can actually be detected with a Python
implemention in O(N) time.