From 3e79ead240a5e085a222841923892826d383f54a Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Thu, 21 Nov 2024 12:52:58 -0600 Subject: [PATCH] TraceQL: Speed up autocomplete tag processing by 100x (#96862) --- .../datasource/tempo/traceql/autocomplete.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/public/app/plugins/datasource/tempo/traceql/autocomplete.ts b/public/app/plugins/datasource/tempo/traceql/autocomplete.ts index 83e5f8d9650..d31d5c64ead 100644 --- a/public/app/plugins/datasource/tempo/traceql/autocomplete.ts +++ b/public/app/plugins/datasource/tempo/traceql/autocomplete.ts @@ -427,13 +427,7 @@ export class CompletionProvider implements monacoTypes.languages.CompletionItemP private getTagsCompletions(prepend?: string, scope?: string): CompletionItem[] { const tags = this.languageProvider.getTraceqlAutocompleteTags(scope); - return tags - .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'accent' })) - .map((key) => ({ - label: key, - insertText: (prepend || '') + key, - type: 'TAG_NAME', - })); + return tagsToCompletionItems(tags, prepend); } private getIntrinsicsCompletions(prepend?: string, append?: string): CompletionItem[] { @@ -549,3 +543,13 @@ function fixSuggestion( } } } + +const collator = new Intl.Collator('en', { sensitivity: 'accent' }); + +function tagsToCompletionItems(tags: string[], prepend = ''): CompletionItem[] { + return tags.sort(collator.compare).map((key) => ({ + label: key, + insertText: `${prepend}${key}`, + type: 'TAG_NAME', + })); +}