Fix minor issues pointed out in the review
This commit is contained in:
parent
3ad8d5363c
commit
ec327a30c3
17 changed files with 293 additions and 270 deletions
|
@ -1440,7 +1440,7 @@ async fn test_collaborating_with_diagnostics(
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
// Share a project as client A
|
// Share a project as client A
|
||||||
|
@ -1675,7 +1675,8 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_language_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
completion_provider: Some(lsp::CompletionOptions {
|
completion_provider: Some(lsp::CompletionOptions {
|
||||||
trigger_characters: Some(vec![".".to_string()]),
|
trigger_characters: Some(vec![".".to_string()]),
|
||||||
|
@ -1684,7 +1685,8 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -1928,7 +1930,7 @@ async fn test_formatting_buffer(cx_a: &mut TestAppContext, cx_b: &mut TestAppCon
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
// Here we insert a fake tree with a directory that exists on disk. This is needed
|
// Here we insert a fake tree with a directory that exists on disk. This is needed
|
||||||
|
@ -2014,7 +2016,7 @@ async fn test_definition(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -2123,7 +2125,7 @@ async fn test_references(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -2303,7 +2305,7 @@ async fn test_document_highlights(cx_a: &mut TestAppContext, cx_b: &mut TestAppC
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
let (project_a, worktree_id) = client_a.build_local_project("/root-1", cx_a).await;
|
let (project_a, worktree_id) = client_a.build_local_project("/root-1", cx_a).await;
|
||||||
|
@ -2400,7 +2402,7 @@ async fn test_lsp_hover(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
let (project_a, worktree_id) = client_a.build_local_project("/root-1", cx_a).await;
|
let (project_a, worktree_id) = client_a.build_local_project("/root-1", cx_a).await;
|
||||||
|
@ -2488,7 +2490,7 @@ async fn test_project_symbols(cx_a: &mut TestAppContext, cx_b: &mut TestAppConte
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -2591,7 +2593,7 @@ async fn test_open_buffer_while_getting_definition_pointing_to_it(
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -2662,7 +2664,7 @@ async fn test_collaborating_with_code_actions(
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -2867,7 +2869,8 @@ async fn test_collaborating_with_renames(cx_a: &mut TestAppContext, cx_b: &mut T
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_language_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
rename_provider: Some(lsp::OneOf::Right(lsp::RenameOptions {
|
rename_provider: Some(lsp::OneOf::Right(lsp::RenameOptions {
|
||||||
prepare_provider: Some(true),
|
prepare_provider: Some(true),
|
||||||
|
@ -2876,7 +2879,8 @@ async fn test_collaborating_with_renames(cx_a: &mut TestAppContext, cx_b: &mut T
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -3051,10 +3055,12 @@ async fn test_language_server_statuses(
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_language_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
name: "the-language-server",
|
name: "the-language-server",
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
client_a.language_registry.add(Arc::new(language));
|
client_a.language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
client_a
|
client_a
|
||||||
|
@ -4577,7 +4583,8 @@ async fn test_random_collaboration(
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let _fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let _fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
name: "the-fake-language-server",
|
name: "the-fake-language-server",
|
||||||
capabilities: lsp::LanguageServer::full_capabilities(),
|
capabilities: lsp::LanguageServer::full_capabilities(),
|
||||||
initializer: Some(Box::new({
|
initializer: Some(Box::new({
|
||||||
|
@ -4585,7 +4592,8 @@ async fn test_random_collaboration(
|
||||||
let fs = fs.clone();
|
let fs = fs.clone();
|
||||||
let project = host_project.downgrade();
|
let project = host_project.downgrade();
|
||||||
move |fake_server: &mut FakeLanguageServer| {
|
move |fake_server: &mut FakeLanguageServer| {
|
||||||
fake_server.handle_request::<lsp::request::Completion, _, _>(|_, _| async move {
|
fake_server.handle_request::<lsp::request::Completion, _, _>(
|
||||||
|
|_, _| async move {
|
||||||
Ok(Some(lsp::CompletionResponse::Array(vec![
|
Ok(Some(lsp::CompletionResponse::Array(vec![
|
||||||
lsp::CompletionItem {
|
lsp::CompletionItem {
|
||||||
text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit {
|
text_edit: Some(lsp::CompletionTextEdit::Edit(lsp::TextEdit {
|
||||||
|
@ -4598,7 +4606,8 @@ async fn test_random_collaboration(
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
])))
|
])))
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|
||||||
fake_server.handle_request::<lsp::request::CodeActionRequest, _, _>(
|
fake_server.handle_request::<lsp::request::CodeActionRequest, _, _>(
|
||||||
|_, _| async move {
|
|_, _| async move {
|
||||||
|
@ -4663,7 +4672,8 @@ async fn test_random_collaboration(
|
||||||
project.find_local_worktree(&path, cx)?;
|
project.find_local_worktree(&path, cx)?;
|
||||||
let project_path =
|
let project_path =
|
||||||
ProjectPath::from((worktree.read(cx).id(), relative_path));
|
ProjectPath::from((worktree.read(cx).id(), relative_path));
|
||||||
let buffer = project.get_open_buffer(&project_path, cx)?.read(cx);
|
let buffer =
|
||||||
|
project.get_open_buffer(&project_path, cx)?.read(cx);
|
||||||
|
|
||||||
let mut highlights = Vec::new();
|
let mut highlights = Vec::new();
|
||||||
let highlight_count = rng.lock().gen_range(1..=5);
|
let highlight_count = rng.lock().gen_range(1..=5);
|
||||||
|
@ -4689,7 +4699,8 @@ async fn test_random_collaboration(
|
||||||
}
|
}
|
||||||
})),
|
})),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
host_language_registry.add(Arc::new(language));
|
host_language_registry.add(Arc::new(language));
|
||||||
|
|
||||||
let op_start_signal = futures::channel::mpsc::unbounded();
|
let op_start_signal = futures::channel::mpsc::unbounded();
|
||||||
|
|
|
@ -959,10 +959,10 @@ pub mod tests {
|
||||||
}"#
|
}"#
|
||||||
.unindent();
|
.unindent();
|
||||||
|
|
||||||
let theme = Arc::new(SyntaxTheme::new(vec![
|
let theme = SyntaxTheme::new(vec![
|
||||||
("mod.body".to_string(), Color::red().into()),
|
("mod.body".to_string(), Color::red().into()),
|
||||||
("fn.name".to_string(), Color::blue().into()),
|
("fn.name".to_string(), Color::blue().into()),
|
||||||
]));
|
]);
|
||||||
let language = Arc::new(
|
let language = Arc::new(
|
||||||
Language::new(
|
Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
|
@ -980,7 +980,7 @@ pub mod tests {
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
language.set_theme(theme.clone());
|
language.set_theme(&theme);
|
||||||
cx.update(|cx| {
|
cx.update(|cx| {
|
||||||
let mut settings = Settings::test(cx);
|
let mut settings = Settings::test(cx);
|
||||||
settings.language_settings.tab_size = Some(2.try_into().unwrap());
|
settings.language_settings.tab_size = Some(2.try_into().unwrap());
|
||||||
|
@ -1049,10 +1049,10 @@ pub mod tests {
|
||||||
}"#
|
}"#
|
||||||
.unindent();
|
.unindent();
|
||||||
|
|
||||||
let theme = Arc::new(SyntaxTheme::new(vec![
|
let theme = SyntaxTheme::new(vec![
|
||||||
("mod.body".to_string(), Color::red().into()),
|
("mod.body".to_string(), Color::red().into()),
|
||||||
("fn.name".to_string(), Color::blue().into()),
|
("fn.name".to_string(), Color::blue().into()),
|
||||||
]));
|
]);
|
||||||
let language = Arc::new(
|
let language = Arc::new(
|
||||||
Language::new(
|
Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
|
@ -1070,7 +1070,7 @@ pub mod tests {
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
language.set_theme(theme.clone());
|
language.set_theme(&theme);
|
||||||
|
|
||||||
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
||||||
|
|
||||||
|
@ -1120,10 +1120,10 @@ pub mod tests {
|
||||||
cx.foreground().set_block_on_ticks(usize::MAX..=usize::MAX);
|
cx.foreground().set_block_on_ticks(usize::MAX..=usize::MAX);
|
||||||
|
|
||||||
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
||||||
let theme = Arc::new(SyntaxTheme::new(vec![
|
let theme = SyntaxTheme::new(vec![
|
||||||
("operator".to_string(), Color::red().into()),
|
("operator".to_string(), Color::red().into()),
|
||||||
("string".to_string(), Color::green().into()),
|
("string".to_string(), Color::green().into()),
|
||||||
]));
|
]);
|
||||||
let language = Arc::new(
|
let language = Arc::new(
|
||||||
Language::new(
|
Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
|
@ -1141,7 +1141,7 @@ pub mod tests {
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
language.set_theme(theme.clone());
|
language.set_theme(&theme);
|
||||||
|
|
||||||
let (text, highlighted_ranges) = marked_text_ranges(r#"const[] [a]: B = "c [d]""#);
|
let (text, highlighted_ranges) = marked_text_ranges(r#"const[] [a]: B = "c [d]""#);
|
||||||
|
|
||||||
|
|
|
@ -9302,13 +9302,15 @@ mod tests {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
document_formatting_provider: Some(lsp::OneOf::Left(true)),
|
document_formatting_provider: Some(lsp::OneOf::Left(true)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background().clone());
|
let fs = FakeFs::new(cx.background().clone());
|
||||||
fs.insert_file("/file.rs", Default::default()).await;
|
fs.insert_file("/file.rs", Default::default()).await;
|
||||||
|
@ -9414,13 +9416,15 @@ mod tests {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
document_range_formatting_provider: Some(lsp::OneOf::Left(true)),
|
document_range_formatting_provider: Some(lsp::OneOf::Left(true)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background().clone());
|
let fs = FakeFs::new(cx.background().clone());
|
||||||
fs.insert_file("/file.rs", Default::default()).await;
|
fs.insert_file("/file.rs", Default::default()).await;
|
||||||
|
@ -9526,7 +9530,8 @@ mod tests {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
completion_provider: Some(lsp::CompletionOptions {
|
completion_provider: Some(lsp::CompletionOptions {
|
||||||
trigger_characters: Some(vec![".".to_string(), ":".to_string()]),
|
trigger_characters: Some(vec![".".to_string(), ":".to_string()]),
|
||||||
|
@ -9535,7 +9540,8 @@ mod tests {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let text = "
|
let text = "
|
||||||
one
|
one
|
||||||
|
|
|
@ -457,10 +457,12 @@ impl<'a> EditorLspTestContext<'a> {
|
||||||
.unwrap_or(&"txt".to_string())
|
.unwrap_or(&"txt".to_string())
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities,
|
capabilities,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let project = Project::test(params.fs.clone(), [], cx).await;
|
let project = Project::test(params.fs.clone(), [], cx).await;
|
||||||
project.update(cx, |project, _| project.languages().add(Arc::new(language)));
|
project.update(cx, |project, _| project.languages().add(Arc::new(language)));
|
||||||
|
|
|
@ -31,7 +31,7 @@ use std::{
|
||||||
str,
|
str,
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
use theme::SyntaxTheme;
|
use theme::{SyntaxTheme, Theme};
|
||||||
use tree_sitter::{self, Query};
|
use tree_sitter::{self, Query};
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
|
|
||||||
|
@ -255,9 +255,6 @@ fn deserialize_regex<'de, D: Deserializer<'de>>(d: D) -> Result<Option<Regex>, D
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// #[cfg(any(test, feature = "test-support"))]
|
|
||||||
// pub type FakeLspAdapter = Arc<FakeLspAdapterInner>;
|
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
pub struct FakeLspAdapter {
|
pub struct FakeLspAdapter {
|
||||||
pub name: &'static str,
|
pub name: &'static str,
|
||||||
|
@ -279,7 +276,6 @@ pub struct Language {
|
||||||
pub(crate) config: LanguageConfig,
|
pub(crate) config: LanguageConfig,
|
||||||
pub(crate) grammar: Option<Arc<Grammar>>,
|
pub(crate) grammar: Option<Arc<Grammar>>,
|
||||||
pub(crate) adapter: Option<Arc<LspAdapter>>,
|
pub(crate) adapter: Option<Arc<LspAdapter>>,
|
||||||
pub(crate) theme: RwLock<Option<Arc<SyntaxTheme>>>,
|
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
fake_adapter: Option<(
|
fake_adapter: Option<(
|
||||||
|
@ -319,7 +315,7 @@ pub struct LanguageRegistry {
|
||||||
>,
|
>,
|
||||||
>,
|
>,
|
||||||
subscription: RwLock<(watch::Sender<()>, watch::Receiver<()>)>,
|
subscription: RwLock<(watch::Sender<()>, watch::Receiver<()>)>,
|
||||||
theme: RwLock<Option<Arc<SyntaxTheme>>>,
|
theme: RwLock<Option<Arc<Theme>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LanguageRegistry {
|
impl LanguageRegistry {
|
||||||
|
@ -344,7 +340,7 @@ impl LanguageRegistry {
|
||||||
|
|
||||||
pub fn add(&self, language: Arc<Language>) {
|
pub fn add(&self, language: Arc<Language>) {
|
||||||
if let Some(theme) = self.theme.read().clone() {
|
if let Some(theme) = self.theme.read().clone() {
|
||||||
language.set_theme(theme);
|
language.set_theme(&theme.editor.syntax);
|
||||||
}
|
}
|
||||||
self.languages.write().push(language.clone());
|
self.languages.write().push(language.clone());
|
||||||
*self.subscription.write().0.borrow_mut() = ();
|
*self.subscription.write().0.borrow_mut() = ();
|
||||||
|
@ -354,10 +350,10 @@ impl LanguageRegistry {
|
||||||
self.subscription.read().1.clone()
|
self.subscription.read().1.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_theme(&self, theme: Arc<SyntaxTheme>) {
|
pub fn set_theme(&self, theme: Arc<Theme>) {
|
||||||
*self.theme.write() = Some(theme.clone());
|
*self.theme.write() = Some(theme.clone());
|
||||||
for language in self.languages.read().iter() {
|
for language in self.languages.read().iter() {
|
||||||
language.set_theme(theme.clone());
|
language.set_theme(&theme.editor.syntax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -579,7 +575,6 @@ impl Language {
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
adapter: None,
|
adapter: None,
|
||||||
theme: Default::default(),
|
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
fake_adapter: None,
|
fake_adapter: None,
|
||||||
|
@ -624,13 +619,13 @@ impl Language {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
pub fn set_fake_lsp_adapter(
|
pub async fn set_fake_lsp_adapter(
|
||||||
&mut self,
|
&mut self,
|
||||||
fake_lsp_adapter: Arc<FakeLspAdapter>,
|
fake_lsp_adapter: Arc<FakeLspAdapter>,
|
||||||
) -> mpsc::UnboundedReceiver<lsp::FakeLanguageServer> {
|
) -> mpsc::UnboundedReceiver<lsp::FakeLanguageServer> {
|
||||||
let (servers_tx, servers_rx) = mpsc::unbounded();
|
let (servers_tx, servers_rx) = mpsc::unbounded();
|
||||||
self.fake_adapter = Some((servers_tx, fake_lsp_adapter.clone()));
|
self.fake_adapter = Some((servers_tx, fake_lsp_adapter.clone()));
|
||||||
let adapter = smol::block_on(LspAdapter::new(fake_lsp_adapter));
|
let adapter = LspAdapter::new(fake_lsp_adapter).await;
|
||||||
self.adapter = Some(adapter);
|
self.adapter = Some(adapter);
|
||||||
servers_rx
|
servers_rx
|
||||||
}
|
}
|
||||||
|
@ -716,21 +711,11 @@ impl Language {
|
||||||
c.is_whitespace() || self.config.autoclose_before.contains(c)
|
c.is_whitespace() || self.config.autoclose_before.contains(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the theme to the given theme, and then calls [`highlight`].
|
pub fn set_theme(&self, theme: &SyntaxTheme) {
|
||||||
pub fn set_theme(&self, theme: Arc<SyntaxTheme>) {
|
|
||||||
*self.theme.write() = Some(theme.clone());
|
|
||||||
self.highlight()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Highlights the grammar according to the current theme,
|
|
||||||
/// if one has been set using [`set_theme`].
|
|
||||||
pub fn highlight(&self) {
|
|
||||||
if let Some(grammar) = self.grammar.as_ref() {
|
if let Some(grammar) = self.grammar.as_ref() {
|
||||||
if let Some(highlights_query) = &grammar.highlights_query {
|
if let Some(highlights_query) = &grammar.highlights_query {
|
||||||
if let Some(theme) = self.theme.read().as_ref() {
|
|
||||||
*grammar.highlight_map.lock() =
|
*grammar.highlight_map.lock() =
|
||||||
HighlightMap::new(highlights_query.capture_names(), &theme);
|
HighlightMap::new(highlights_query.capture_names(), theme);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -410,20 +410,18 @@ pub async fn deserialize_completion(
|
||||||
.and_then(deserialize_anchor)
|
.and_then(deserialize_anchor)
|
||||||
.ok_or_else(|| anyhow!("invalid old end"))?;
|
.ok_or_else(|| anyhow!("invalid old end"))?;
|
||||||
let lsp_completion = serde_json::from_slice(&completion.lsp_completion)?;
|
let lsp_completion = serde_json::from_slice(&completion.lsp_completion)?;
|
||||||
Ok(Completion {
|
|
||||||
old_range: old_start..old_end,
|
|
||||||
new_text: completion.new_text,
|
|
||||||
label: {
|
|
||||||
let label = match language {
|
let label = match language {
|
||||||
Some(l) => l.label_for_completion(&lsp_completion).await,
|
Some(l) => l.label_for_completion(&lsp_completion).await,
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
label.unwrap_or(CodeLabel::plain(
|
Ok(Completion {
|
||||||
|
old_range: old_start..old_end,
|
||||||
|
new_text: completion.new_text,
|
||||||
|
label: label.unwrap_or(CodeLabel::plain(
|
||||||
lsp_completion.label.clone(),
|
lsp_completion.label.clone(),
|
||||||
lsp_completion.filter_text.as_deref(),
|
lsp_completion.filter_text.as_deref(),
|
||||||
))
|
)),
|
||||||
},
|
|
||||||
lsp_completion,
|
lsp_completion,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
pub use bincode;
|
pub use bincode;
|
||||||
pub use serde;
|
pub use serde;
|
||||||
|
|
||||||
// TODO: move the implementation to one place?
|
/// This is the buffer that is used Wasm side.
|
||||||
|
/// Note that it mirrors the functionality of
|
||||||
|
/// the `WasiBuffer` found in `plugin_runtime/src/plugin.rs`,
|
||||||
|
/// But has a few different methods.
|
||||||
pub struct __Buffer {
|
pub struct __Buffer {
|
||||||
pub ptr: u32, // *const u8,
|
pub ptr: u32, // *const u8,
|
||||||
pub len: u32, // usize,
|
pub len: u32, // usize,
|
||||||
|
|
|
@ -67,7 +67,6 @@ pub fn export(args: TokenStream, function: TokenStream) -> TokenStream {
|
||||||
#inner_fn
|
#inner_fn
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
// TODO: switch len from usize to u32?
|
|
||||||
pub extern "C" fn #outer_fn_name(packed_buffer: u64) -> u64 {
|
pub extern "C" fn #outer_fn_name(packed_buffer: u64) -> u64 {
|
||||||
// setup
|
// setup
|
||||||
let data = unsafe { ::plugin::__Buffer::from_u64(packed_buffer).to_vec() };
|
let data = unsafe { ::plugin::__Buffer::from_u64(packed_buffer).to_vec() };
|
||||||
|
|
|
@ -31,6 +31,7 @@ All functions that Plugin exports must have the following properties:
|
||||||
Additionally, Plugin must export an:
|
Additionally, Plugin must export an:
|
||||||
|
|
||||||
- `__alloc_buffer` function that, given a `u32` length, returns a `u32` pointer to a buffer of that length.
|
- `__alloc_buffer` function that, given a `u32` length, returns a `u32` pointer to a buffer of that length.
|
||||||
|
- `__free_buffer` function that, given a buffer encoded as a `u64`, frees the buffer at the given location, and does not return anything.
|
||||||
|
|
||||||
Note that all of these requirements are automatically fullfilled for any Rust Wasm plugin that uses the `plugin` crate, and imports the `prelude`.
|
Note that all of these requirements are automatically fullfilled for any Rust Wasm plugin that uses the `plugin` crate, and imports the `prelude`.
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@ use wasmtime::{Config, Engine};
|
||||||
fn main() {
|
fn main() {
|
||||||
let base = Path::new("../../plugins");
|
let base = Path::new("../../plugins");
|
||||||
|
|
||||||
// println!("cargo:rerun-if-changed=../../plugins/*");
|
println!("cargo:rerun-if-changed={}", base.display());
|
||||||
println!("cargo:warning=Precompiling plugins...");
|
println!("cargo:warning=Rebuilding precompiled plugins...");
|
||||||
|
|
||||||
let _ = std::fs::remove_dir_all(base.join("bin"));
|
let _ = std::fs::remove_dir_all(base.join("bin"));
|
||||||
let _ =
|
let _ =
|
||||||
|
|
|
@ -16,7 +16,9 @@ use wasmtime_wasi::{Dir, WasiCtx, WasiCtxBuilder};
|
||||||
/// Represents a resource currently managed by the plugin, like a file descriptor.
|
/// Represents a resource currently managed by the plugin, like a file descriptor.
|
||||||
pub struct PluginResource(u32);
|
pub struct PluginResource(u32);
|
||||||
|
|
||||||
#[repr(C)]
|
/// This is the buffer that is used Host side.
|
||||||
|
/// Note that it mirrors the functionality of
|
||||||
|
/// the `__Buffer` found in the `plugin/src/lib.rs` prelude.
|
||||||
struct WasiBuffer {
|
struct WasiBuffer {
|
||||||
ptr: u32,
|
ptr: u32,
|
||||||
len: u32,
|
len: u32,
|
||||||
|
|
|
@ -86,7 +86,8 @@ async fn test_managing_language_servers(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let mut fake_rust_servers = rust_language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_rust_servers = rust_language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
name: "the-rust-language-server",
|
name: "the-rust-language-server",
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
completion_provider: Some(lsp::CompletionOptions {
|
completion_provider: Some(lsp::CompletionOptions {
|
||||||
|
@ -96,8 +97,10 @@ async fn test_managing_language_servers(cx: &mut gpui::TestAppContext) {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
let mut fake_json_servers = json_language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
.await;
|
||||||
|
let mut fake_json_servers = json_language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
name: "the-json-language-server",
|
name: "the-json-language-server",
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
completion_provider: Some(lsp::CompletionOptions {
|
completion_provider: Some(lsp::CompletionOptions {
|
||||||
|
@ -107,7 +110,8 @@ async fn test_managing_language_servers(cx: &mut gpui::TestAppContext) {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
@ -646,11 +650,13 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
disk_based_diagnostics_progress_token: Some(progress_token.into()),
|
disk_based_diagnostics_progress_token: Some(progress_token.into()),
|
||||||
disk_based_diagnostics_sources: vec!["disk".into()],
|
disk_based_diagnostics_sources: vec!["disk".into()],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
@ -769,11 +775,13 @@ async fn test_restarting_server_with_diagnostics_running(cx: &mut gpui::TestAppC
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
disk_based_diagnostics_sources: vec!["disk".into()],
|
disk_based_diagnostics_sources: vec!["disk".into()],
|
||||||
disk_based_diagnostics_progress_token: Some(progress_token.into()),
|
disk_based_diagnostics_progress_token: Some(progress_token.into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree("/dir", json!({ "a.rs": "" })).await;
|
fs.insert_tree("/dir", json!({ "a.rs": "" })).await;
|
||||||
|
@ -848,10 +856,12 @@ async fn test_toggling_enable_language_server(
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let mut fake_rust_servers = rust.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_rust_servers = rust
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
name: "rust-lsp",
|
name: "rust-lsp",
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
let mut js = Language::new(
|
let mut js = Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
name: Arc::from("JavaScript"),
|
name: Arc::from("JavaScript"),
|
||||||
|
@ -860,10 +870,12 @@ async fn test_toggling_enable_language_server(
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let mut fake_js_servers = js.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_js_servers = js
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
name: "js-lsp",
|
name: "js-lsp",
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree("/dir", json!({ "a.rs": "", "b.js": "" }))
|
fs.insert_tree("/dir", json!({ "a.rs": "", "b.js": "" }))
|
||||||
|
@ -969,10 +981,12 @@ async fn test_transforming_diagnostics(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
disk_based_diagnostics_sources: vec!["disk".into()],
|
disk_based_diagnostics_sources: vec!["disk".into()],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let text = "
|
let text = "
|
||||||
fn a() { A }
|
fn a() { A }
|
||||||
|
@ -1311,7 +1325,7 @@ async fn test_edits_from_lsp_with_past_version(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
|
|
||||||
let text = "
|
let text = "
|
||||||
fn a() {
|
fn a() {
|
||||||
|
@ -1712,7 +1726,7 @@ async fn test_definition(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
@ -1811,7 +1825,7 @@ async fn test_completions_without_edit_ranges(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_typescript::language_typescript()),
|
Some(tree_sitter_typescript::language_typescript()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
@ -1895,7 +1909,7 @@ async fn test_completions_with_carriage_returns(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_typescript::language_typescript()),
|
Some(tree_sitter_typescript::language_typescript()),
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
@ -1948,7 +1962,7 @@ async fn test_apply_code_actions_with_commands(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default());
|
let mut fake_language_servers = language.set_fake_lsp_adapter(Default::default()).await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
@ -2876,7 +2890,8 @@ async fn test_rename(cx: &mut gpui::TestAppContext) {
|
||||||
},
|
},
|
||||||
Some(tree_sitter_rust::language()),
|
Some(tree_sitter_rust::language()),
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::new(FakeLspAdapter {
|
||||||
capabilities: lsp::ServerCapabilities {
|
capabilities: lsp::ServerCapabilities {
|
||||||
rename_provider: Some(lsp::OneOf::Right(lsp::RenameOptions {
|
rename_provider: Some(lsp::OneOf::Right(lsp::RenameOptions {
|
||||||
prepare_provider: Some(true),
|
prepare_provider: Some(true),
|
||||||
|
@ -2885,7 +2900,8 @@ async fn test_rename(cx: &mut gpui::TestAppContext) {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}))
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree(
|
fs.insert_tree(
|
||||||
|
|
|
@ -290,7 +290,9 @@ mod tests {
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
let mut fake_servers = language.set_fake_lsp_adapter(Arc::<FakeLspAdapter>::default());
|
let mut fake_servers = language
|
||||||
|
.set_fake_lsp_adapter(Arc::<FakeLspAdapter>::default())
|
||||||
|
.await;
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background());
|
let fs = FakeFs::new(cx.background());
|
||||||
fs.insert_tree("/dir", json!({ "test.rs": "" })).await;
|
fs.insert_tree("/dir", json!({ "test.rs": "" })).await;
|
||||||
|
|
|
@ -324,7 +324,7 @@ mod tests {
|
||||||
("number".into(), Color::yellow().into()),
|
("number".into(), Color::yellow().into()),
|
||||||
("property".into(), Color::white().into()),
|
("property".into(), Color::white().into()),
|
||||||
]);
|
]);
|
||||||
language.set_theme(theme.into());
|
language.set_theme(&theme);
|
||||||
|
|
||||||
let grammar = language.grammar().unwrap();
|
let grammar = language.grammar().unwrap();
|
||||||
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
||||||
|
|
|
@ -315,7 +315,7 @@ mod tests {
|
||||||
("property".into(), Color::white().into()),
|
("property".into(), Color::white().into()),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
language.set_theme(theme.into());
|
language.set_theme(&theme);
|
||||||
|
|
||||||
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
||||||
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
||||||
|
@ -394,7 +394,7 @@ mod tests {
|
||||||
("property".into(), Color::white().into()),
|
("property".into(), Color::white().into()),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
language.set_theme(theme.into());
|
language.set_theme(&theme);
|
||||||
|
|
||||||
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
||||||
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
||||||
|
|
|
@ -217,7 +217,7 @@ fn main() {
|
||||||
cx.observe_global::<Settings, _>({
|
cx.observe_global::<Settings, _>({
|
||||||
let languages = languages.clone();
|
let languages = languages.clone();
|
||||||
move |cx| {
|
move |cx| {
|
||||||
languages.set_theme(cx.global::<Settings>().theme.editor.syntax.clone());
|
languages.set_theme(cx.global::<Settings>().theme.clone());
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.detach();
|
.detach();
|
||||||
|
@ -225,9 +225,7 @@ fn main() {
|
||||||
cx.spawn({
|
cx.spawn({
|
||||||
let languages = languages.clone();
|
let languages = languages.clone();
|
||||||
|cx| async move {
|
|cx| async move {
|
||||||
cx.read(|cx| {
|
cx.read(|cx| languages.set_theme(cx.global::<Settings>().theme.clone()));
|
||||||
languages.set_theme(cx.global::<Settings>().theme.editor.syntax.clone())
|
|
||||||
});
|
|
||||||
init_languages.await;
|
init_languages.await;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue