From 592db76a522e052e331d14b00cd66fef8f19c981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20F=C3=B6rster?= Date: Tue, 25 Dec 2018 17:23:50 +0100 Subject: [PATCH] Improve performance of completion --- .../kotlin/texlab/TextDocumentServiceImpl.kt | 45 +++++++++---------- .../completion/LimitedCompletionProvider.kt | 11 +++++ 2 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 src/main/kotlin/texlab/completion/LimitedCompletionProvider.kt diff --git a/src/main/kotlin/texlab/TextDocumentServiceImpl.kt b/src/main/kotlin/texlab/TextDocumentServiceImpl.kt index 111eb644..3bddbfa5 100644 --- a/src/main/kotlin/texlab/TextDocumentServiceImpl.kt +++ b/src/main/kotlin/texlab/TextDocumentServiceImpl.kt @@ -4,8 +4,8 @@ import org.eclipse.lsp4j.* import org.eclipse.lsp4j.jsonrpc.messages.Either import org.eclipse.lsp4j.services.TextDocumentService import texlab.completion.AggregateCompletionProvider -import texlab.completion.CompletionProvider import texlab.completion.CompletionRequest +import texlab.completion.LimitedCompletionProvider import texlab.completion.OrderByQualityProvider import texlab.completion.latex.* import texlab.completion.latex.data.LatexResolver @@ -22,24 +22,25 @@ import java.util.concurrent.CompletableFuture class TextDocumentServiceImpl(private val workspace: Workspace) : TextDocumentService { private val resolver = LatexResolver.create() - private val completionProvider: CompletionProvider = - OrderByQualityProvider( - AggregateCompletionProvider( - LatexIncludeProvider(workspace), - LatexBibliographyProvider(workspace), - LatexPackageImportProvider(resolver), - LatexClassImportProvider(resolver), - PgfLibraryProvider(), - TikzLibraryProvider(), - LatexColorProvider(), - DefineColorModelProvider(), - DefineColorSetModelProvider(), - LatexLabelProvider(), - LatexBeginCommandProvider(), - LatexKernelEnvironmentProvider(), - LatexUserEnvironmentProvider(), - LatexKernelCommandProvider(), - LatexUserCommandProvider())) + private val completionProvider: LimitedCompletionProvider = + LimitedCompletionProvider( + OrderByQualityProvider( + AggregateCompletionProvider( + LatexIncludeProvider(workspace), + LatexBibliographyProvider(workspace), + LatexClassImportProvider(resolver), + LatexPackageImportProvider(resolver), + PgfLibraryProvider(), + TikzLibraryProvider(), + LatexColorProvider(), + DefineColorModelProvider(), + DefineColorSetModelProvider(), + LatexLabelProvider(), + LatexBeginCommandProvider(), + LatexKernelEnvironmentProvider(), + LatexUserEnvironmentProvider(), + LatexKernelCommandProvider(), + LatexUserCommandProvider()))) private val symbolProvider: SymbolProvider = AggregateSymbolProvider( @@ -58,10 +59,6 @@ class TextDocumentServiceImpl(private val workspace: Workspace) : TextDocumentSe private val linkProvider: LinkProvider = AggregateLinkProvider(LatexIncludeLinkProvider) - companion object { - private const val MAX_COMPLETIONS_ITEMS_COUNT = 100 - } - override fun didOpen(params: DidOpenTextDocumentParams) { params.textDocument.apply { val language = getLanguageById(languageId) ?: return @@ -137,7 +134,7 @@ class TextDocumentServiceImpl(private val workspace: Workspace) : TextDocumentSe val relatedDocuments = workspace.relatedDocuments(uri) val request = CompletionRequest(uri, relatedDocuments, params.position) val items = completionProvider.getItems(request).toList() - val list = CompletionList(items.size == MAX_COMPLETIONS_ITEMS_COUNT, items) + val list = CompletionList(items.size == completionProvider.limit, items) return CompletableFuture.completedFuture(Either.forRight(list)) } } diff --git a/src/main/kotlin/texlab/completion/LimitedCompletionProvider.kt b/src/main/kotlin/texlab/completion/LimitedCompletionProvider.kt new file mode 100644 index 00000000..f88c1a05 --- /dev/null +++ b/src/main/kotlin/texlab/completion/LimitedCompletionProvider.kt @@ -0,0 +1,11 @@ +package texlab.completion + +import org.eclipse.lsp4j.CompletionItem + +class LimitedCompletionProvider(private val provider: CompletionProvider, + val limit: Int = 100) : CompletionProvider { + override fun getItems(request: CompletionRequest): List { + return provider.getItems(request) + .take(limit) + } +}