summaryrefslogtreecommitdiff
path: root/support/texlab/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/server.rs')
-rw-r--r--support/texlab/src/server.rs26
1 files changed, 23 insertions, 3 deletions
diff --git a/support/texlab/src/server.rs b/support/texlab/src/server.rs
index e22fe4f5c9..9c5e1b857b 100644
--- a/support/texlab/src/server.rs
+++ b/support/texlab/src/server.rs
@@ -3,7 +3,7 @@ use crate::citeproc::render_citation;
use crate::{
build::BuildProvider,
- completion::{CompletionItemData, CompletionProvider},
+ completion::{CompletionItemData, CompletionProvider, COMPLETION_LIMIT},
components::COMPONENT_DATABASE,
config::ConfigManager,
definition::DefinitionProvider,
@@ -35,6 +35,7 @@ pub struct LatexLspServer<C> {
distro: Arc<dyn Distribution>,
client: Arc<C>,
client_capabilities: OnceCell<Arc<ClientCapabilities>>,
+ client_info: OnceCell<Option<ClientInfo>>,
current_dir: Arc<PathBuf>,
config_manager: OnceCell<ConfigManager<C>>,
action_manager: ActionManager,
@@ -62,6 +63,7 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
distro,
client: Arc::clone(&client),
client_capabilities: OnceCell::new(),
+ client_info: OnceCell::new(),
current_dir,
config_manager: OnceCell::new(),
action_manager: ActionManager::default(),
@@ -102,6 +104,10 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
.set(Arc::new(params.capabilities))
.expect("initialize was called two times");
+ self.client_info
+ .set(params.client_info)
+ .expect("initialize was called two times");
+
let _ = self.config_manager.set(ConfigManager::new(
Arc::clone(&self.client),
self.client_capabilities(),
@@ -253,9 +259,23 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
req.params.text_document_position.position,
);
+ let items = self.completion_provider.execute(&req).await;
+ let is_incomplete = if self
+ .client_info
+ .get()
+ .and_then(|info| info.as_ref())
+ .map(|info| info.name.as_str())
+ .unwrap_or_default()
+ == "vscode"
+ {
+ true
+ } else {
+ items.len() >= COMPLETION_LIMIT
+ };
+
Ok(CompletionList {
- is_incomplete: true,
- items: self.completion_provider.execute(&req).await,
+ is_incomplete,
+ items,
})
}