Improve performance of completion

This commit is contained in:
Patrick Förster 2018-12-25 17:23:50 +01:00
parent 9352532076
commit 592db76a52
2 changed files with 32 additions and 24 deletions

View file

@ -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))
}
}

View file

@ -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<CompletionItem> {
return provider.getItems(request)
.take(limit)
}
}