From b40e5ce729ce49b7311e92f65f1f21c514aa9c2c Mon Sep 17 00:00:00 2001 From: Jackson Kearl Date: Tue, 14 Jan 2020 20:11:36 -0800 Subject: [PATCH] Add `matchienessHeuristic` to delay some regex searches. Fixes #88539. --- .../contrib/search/browser/searchWidget.ts | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/search/browser/searchWidget.ts b/src/vs/workbench/contrib/search/browser/searchWidget.ts index 30b5c34eb4a..c526a5f0fde 100644 --- a/src/vs/workbench/contrib/search/browser/searchWidget.ts +++ b/src/vs/workbench/contrib/search/browser/searchWidget.ts @@ -499,7 +499,31 @@ export class SearchWidget extends Widget { this.temporarilySkipSearchOnChange = false; } else { this._onSearchCancel.fire({ focus: false }); - this._searchDelayer.trigger((() => this.submitSearch(true)), this.searchConfiguration.searchOnTypeDebouncePeriod); + if (this.searchInput.getRegex()) { + try { + const regex = new RegExp(this.searchInput.getValue(), 'ug'); + const matchienessHeuristic = ` +~!@#$%^&*()_+ +\`1234567890-= +qwertyuiop[]\\ +QWERTYUIOP{}| +asdfghjkl;' +ASDFGHJKL:" +zxcvbnm,./ +ZXCVBNM<>? `.match(regex)?.length ?? 0; + + const delayMultiplier = + matchienessHeuristic < 50 ? 1 : + matchienessHeuristic < 100 ? 5 : // expressions like `.` or `\w` + 10; // only things matching empty string + + this._searchDelayer.trigger((() => this.submitSearch(true)), this.searchConfiguration.searchOnTypeDebouncePeriod * delayMultiplier); + } catch { + // pass + } + } else { + this._searchDelayer.trigger((() => this.submitSearch(true)), this.searchConfiguration.searchOnTypeDebouncePeriod); + } } } } -- GitLab