Show message indicating when we're downloading language servers
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
d2c83a7097
commit
aee479d615
16 changed files with 214 additions and 93 deletions
|
@ -12,10 +12,11 @@ use futures::{
|
|||
future::{BoxFuture, Shared},
|
||||
FutureExt,
|
||||
};
|
||||
use gpui::{AppContext, Task};
|
||||
use gpui::{executor, AppContext, Task};
|
||||
use highlight_map::HighlightMap;
|
||||
use lazy_static::lazy_static;
|
||||
use parking_lot::Mutex;
|
||||
use postage::watch;
|
||||
use serde::Deserialize;
|
||||
use std::{
|
||||
cell::RefCell,
|
||||
|
@ -127,18 +128,33 @@ pub struct Grammar {
|
|||
pub(crate) highlight_map: Mutex<HighlightMap>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct LanguageRegistry {
|
||||
languages: Vec<Arc<Language>>,
|
||||
pending_lsp_binaries_tx: Arc<Mutex<watch::Sender<usize>>>,
|
||||
pending_lsp_binaries_rx: watch::Receiver<usize>,
|
||||
}
|
||||
|
||||
impl LanguageRegistry {
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
let (pending_lsp_binaries_tx, pending_lsp_binaries_rx) = watch::channel();
|
||||
Self {
|
||||
languages: Default::default(),
|
||||
pending_lsp_binaries_tx: Arc::new(Mutex::new(pending_lsp_binaries_tx)),
|
||||
pending_lsp_binaries_rx,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add(&mut self, language: Arc<Language>) {
|
||||
self.languages.push(language);
|
||||
pub fn add(&mut self, language: Arc<Language>, cx: &executor::Background) {
|
||||
self.languages.push(language.clone());
|
||||
if let Some(lsp_binary_path) = language.lsp_binary_path() {
|
||||
let pending_lsp_binaries_tx = self.pending_lsp_binaries_tx.clone();
|
||||
cx.spawn(async move {
|
||||
*pending_lsp_binaries_tx.lock().borrow_mut() += 1;
|
||||
lsp_binary_path.await;
|
||||
*pending_lsp_binaries_tx.lock().borrow_mut() -= 1;
|
||||
})
|
||||
.detach();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_theme(&self, theme: &SyntaxTheme) {
|
||||
|
@ -166,6 +182,10 @@ impl LanguageRegistry {
|
|||
.any(|suffix| path_suffixes.contains(&Some(suffix.as_str())))
|
||||
})
|
||||
}
|
||||
|
||||
pub fn pending_lsp_binaries(&self) -> watch::Receiver<usize> {
|
||||
self.pending_lsp_binaries_rx.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Language {
|
||||
|
|
|
@ -22,28 +22,31 @@ fn init_logger() {
|
|||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_select_language() {
|
||||
let registry = LanguageRegistry {
|
||||
languages: vec![
|
||||
Arc::new(Language::new(
|
||||
LanguageConfig {
|
||||
name: "Rust".to_string(),
|
||||
path_suffixes: vec!["rs".to_string()],
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_rust::language()),
|
||||
)),
|
||||
Arc::new(Language::new(
|
||||
LanguageConfig {
|
||||
name: "Make".to_string(),
|
||||
path_suffixes: vec!["Makefile".to_string(), "mk".to_string()],
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_rust::language()),
|
||||
)),
|
||||
],
|
||||
};
|
||||
#[gpui::test]
|
||||
fn test_select_language(cx: &mut MutableAppContext) {
|
||||
let mut registry = LanguageRegistry::new();
|
||||
registry.add(
|
||||
Arc::new(Language::new(
|
||||
LanguageConfig {
|
||||
name: "Rust".to_string(),
|
||||
path_suffixes: vec!["rs".to_string()],
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_rust::language()),
|
||||
)),
|
||||
cx.background(),
|
||||
);
|
||||
registry.add(
|
||||
Arc::new(Language::new(
|
||||
LanguageConfig {
|
||||
name: "Make".to_string(),
|
||||
path_suffixes: vec!["Makefile".to_string(), "mk".to_string()],
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_rust::language()),
|
||||
)),
|
||||
cx.background(),
|
||||
);
|
||||
|
||||
// matching file extension
|
||||
assert_eq!(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue