From f10d57ed66a12ade7dfab52b71630c4ef7a6e490 Mon Sep 17 00:00:00 2001 From: Kalven Schraut <30308012+kalvenschraut@users.noreply.github.com> Date: Sat, 13 May 2023 01:27:38 -0500 Subject: [PATCH] perf(language-service): avoid looping through all items twice (#3158) --- .../src/languageService.ts | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/vue-language-service/src/languageService.ts b/packages/vue-language-service/src/languageService.ts index 684595485..61fc1065e 100644 --- a/packages/vue-language-service/src/languageService.ts +++ b/packages/vue-language-service/src/languageService.ts @@ -82,23 +82,24 @@ function resolvePlugins( ); // handle component auto-import patch + let sourceIsKebabCasing: boolean | null = null; for (const [_, map] of _context.documents.getMapsByVirtualFileUri(document.uri)) { const virtualFile = _context.documents.getSourceByUri(map.sourceFileDocument.uri)?.root; if (virtualFile instanceof vue.VueFile) { const isAutoImport = !!map.toSourcePosition(position, data => typeof data.completion === 'object' && !!data.completion.autoImportOnly); if (isAutoImport) { - result.items.forEach(item => { - item.data.__isComponentAutoImport = true; - }); - - // fix #2458 const source = _context.documents.getVirtualFileByUri(document.uri)[1]; - if (source && _context.typescript) { - const casing = await getNameCasing(_context, _context.typescript, _context.fileNameToUri(source.fileName)); - if (casing.tag === TagNameCasing.Kebab) { - result.items.forEach(item => { + for (const item of result.items) { + item.data.__isComponentAutoImport = true; + // fix #2458 + if (source && _context.typescript) { + if (sourceIsKebabCasing === null) { + const casing = await getNameCasing(_context, _context.typescript, _context.fileNameToUri(source.fileName)); + sourceIsKebabCasing = casing.tag === TagNameCasing.Kebab; + } + if (sourceIsKebabCasing) { item.filterText = hyphenate(item.filterText ?? item.label); - }); + } } } }